1

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

很好。

4

2 回答 2

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 ║
╚══════════╩═══════╝
于 2013-05-03T16:32:12.030 回答
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。

于 2013-05-03T16:38:37.193 回答