说我GROUP BY
一个COUNT(*)
。
COUNT(*) Value
3 200
7 200
10 20
15 80
21 100
30 200
33 400
36 300
37 100
我想把每个超过30的其他数字加到自己的行中。
COUNT(*) Value
3 200
7 200
10 20
15 80
21 100
30 200
30+ 800
是否有可能在没有子查询的情况下实现这一点/在mysql中查询数据两次?
谢谢!
编辑:当我指的是子查询时,我的意思是子查询,因为没有完成2个“完整”查询,这个:
SELECT * FROM(SELECT *...)
很好。
答案 0 :(得分:2)
试试这个,
SELECT CASE WHEN Count > 30 THEN '30+' ELSE Count END `COUNT(*)`,
SUM(Value) Value
FROM TableName
GROUP BY CASE WHEN Count > 30 THEN '30+' ELSE Count END
ORDER BY Count
输出
╔══════════╦═══════╗
║ COUNT(*) ║ VALUE ║
╠══════════╬═══════╣
║ 3 ║ 200 ║
║ 7 ║ 200 ║
║ 10 ║ 20 ║
║ 15 ║ 80 ║
║ 21 ║ 100 ║
║ 30 ║ 200 ║
║ 30+ ║ 800 ║
╚══════════╩═══════╝
答案 1 :(得分:0)
您可以对COUNT的结果使用IF()函数,但由于该结果仅在结果集完成时可用,因此需要子查询或至少是派生表。
SELECT t.somekey, SUM(IF(t.c > 30, 31, t.c)) As Cnt, SUM(t.s) As Value
FROM (
SELECT somekey, COUNT(*) c, SUM(value) s
FROM sometable
) as t
GROUP BY t.somekey
这样做的结果是大于30的所有内容将组合在一起为31。