MySQL只输出n行,并将其余行分组为第n + 1行

时间:2014-01-27 06:25:47

标签: mysql sql select group-by aggregate-functions

是否可以构建SQL查询以仅输出n行,并总结第n + 1行返回的其余列。

例如,我有两个从SQL查询返回的列。第一列是名称,第二列包含计数值。名称是不同的,计数是数字。

查询应该只返回3行,如果有超过3行,它们都应该总结为第四行,名称为“其他”,其余行的计数总计为第四行行。

请帮助我。提前谢谢。

(例子)
表格
名称|值
首先 - 12
第二 - 11
第三 - 9
第四 - 15
第五 - 13
第六 - 8周

查询结果
名称|价值
首先 - 12
第二 - 11
第三 - 9
其他 - 36

3 个答案:

答案 0 :(得分:0)

我相信它会是这样的:

SELECT DISTINCT TOP 3 Col1, Col2
FROM Table

除非你想让第二列计算一些东西,否则它将是

SELECT DISTINCT TOP 3 Col1, Count(Col2) AS "New Name"
FROM Table
GROUP BY Col1

这是假设你只需要前3个。如果你想要第4行,使用另一个使用OFFSET的select语句执行UNION,那么你可以选择除了前3个之外的所有行。

在TOP,OFFSET和UNION上查看hereherehere

重新阅读问题的第一部分,如果您希望更改TOP编号,您很可能需要将其作为存储过程,并传递一个控制TOP和OFFSET编号的变量。使用this作为参考。

答案 1 :(得分:0)

尝试GROUP BY...WITH ROLLUP对n + 1行中的所有行数进行求和。试试下面的例子。

SELECT IFNULL(a.id, 'Other'), SUM(1) ids
FROM tableA 
GROUP BY a.id WITH ROLLUP

答案 2 :(得分:0)

Could you try something like this :

select case(name) 
    when 'First' THEN 'First'
    when 'Second' THEN 'Second'
    when 'Third' THEN 'Third'
    else 'Others'
end name, sum(value) value
from table
group by case(name) 
    when 'First' THEN 'First'
    when 'Second' THEN 'Second'
    when 'Third' THEN 'Third'
    else 'Others'