按特定值分组

时间:2013-05-03 16:29:44

标签: mysql

说我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 *...)

很好。

2 个答案:

答案 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。