带附加行的MySQL分组查询

带附加行的MySQL分组查询,mysql,sql,Mysql,Sql,我有一张像下面这样的表格叫做交易 我需要得到前3名数量明智的交易员和所有其他人在一个单独的行 SELECT trader,SUM(qty) FROM traders GROUP BY trader DESC LIMIT 3 从上面的问题中,我可以得到如下的答案 tr qty abc 52000 xyz 38000 pqr 26500 但我的要求如下 tr qty abc 52000 xyz 38000 pqr

我有一张像下面这样的表格叫做交易

我需要得到前3名数量明智的交易员和所有其他人在一个单独的行

SELECT trader,SUM(qty)
FROM traders
GROUP BY trader DESC
LIMIT 3
从上面的问题中,我可以得到如下的答案

tr        qty

abc      52000
xyz      38000
pqr      26500
但我的要求如下

tr        qty

abc      52000
xyz      38000
pqr      26500
other    45000   ----- with this column for all other traders except the largest 3
请尝试此查询-

SELECT
  IF(t2.trader IS NULL, 'other', t1.trader) trader,
  SUM(qty) qty
FROM traders t1
  LEFT JOIN (
  SELECT trader, SUM(qty) FROM traders
    GROUP BY trader
    ORDER BY SUM(qty) DESC
    LIMIT 3) t2
  ON t1.trader = t2.trader
GROUP BY trader
ORDER BY IF(t2.trader IS NULL, 1, 0), qty DESC

+--------+-------+
| trader | qty   |
+--------+-------+
| abc    | 52000 |
| xyz    | 38000 |
| pqr    | 26500 |
| other  | 45000 |
+--------+-------+
请尝试此查询-

SELECT
  IF(t2.trader IS NULL, 'other', t1.trader) trader,
  SUM(qty) qty
FROM traders t1
  LEFT JOIN (
  SELECT trader, SUM(qty) FROM traders
    GROUP BY trader
    ORDER BY SUM(qty) DESC
    LIMIT 3) t2
  ON t1.trader = t2.trader
GROUP BY trader
ORDER BY IF(t2.trader IS NULL, 1, 0), qty DESC

+--------+-------+
| trader | qty   |
+--------+-------+
| abc    | 52000 |
| xyz    | 38000 |
| pqr    | 26500 |
| other  | 45000 |
+--------+-------+
这里还有一个:

(select trader, sum(qty)
 from trades
 group by trader
 order by sum(qty) desc
 limit 3)
union
(select 'other', sum(qty)
 from (select trader, sum(qty) qty
       from trades
       group by trader
       order by sum(qty) desc
       limit 3, 4000000000) t);
用于玩。

这里还有一个:

(select trader, sum(qty)
 from trades
 group by trader
 order by sum(qty) desc
 limit 3)
union
(select 'other', sum(qty)
 from (select trader, sum(qty) qty
       from trades
       group by trader
       order by sum(qty) desc
       limit 3, 4000000000) t);

如果你解决了这个问题,考虑一下。谢谢。@ USS17938 64如果这解决了你的问题,考虑一下。非常感谢。