我有当前表:
+----------+-------+
| salesman | sales |
+----------+-------+
| 1 | 142 |
| 2 | 120 |
| 3 | 176 |
| 4 | 140 |
| 5 | 113 |
| 6 | 137 |
| 7 | 152 |
+----------+-------+
我想进行查询以检索前 3 名销售员和“其他”列,这将是其他人的总和。预期的输出将是:
+----------+-------+
| salesman | sales |
+----------+-------+
| 3 | 176 |
| 7 | 152 |
| 1 | 142 |
| Others | 510 |
+----------+-------+
我正在使用 MySQL,我对此很有经验,但我想不出一种方法来执行这种 GROUP BY
。
尝试使用 UNION
和 2 个 SELECT
,一个用于前 3 名销售员,另一个用于“其他”,但我想不出一种方法来排除从第二个 SELECT
最佳答案
您可以通过LEFT JOIN
将您的表加入前 3 名销售员的列表,然后根据前 3 名表中的 COALESCE
d 销售员编号进行分组来实现此目的(如果销售员不在前 3 名中,则为 NULL
)。
SELECT COALESCE(top.sman, 'Others') AS saleman,
SUM(sales) AS sales
FROM test
LEFT JOIN (SELECT salesman AS sman
FROM test
ORDER BY sales DESC
LIMIT 3) top ON top.sman = test.salesman
GROUP BY saleman
ORDER BY saleman = 'Others', sales DESC
输出:
saleman sales
3 176
7 152
1 142
Others 510
关于mysql - 将第 n 行之后的所有行组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708522/