Как я могу суммировать строки, которые встречаются только один раз? - PullRequest
5 голосов
/ 09 февраля 2012

У меня есть запрос, который возвращает количество строк отдельного device_type, которые встречаются более одного раза.

SELECT COUNT(*) AS C1,device_type FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C1 > 1 
    ORDER BY 1 DESC

Я хотел бы суммировать оставшиеся строки (HAVING count = 1) как «другие»

Как мне добавить сумму COUNT (*) и 'others' в качестве второго столбца для следующего запроса?

SELECT COUNT(*) AS C2,device_type FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C2 = 1 
    ORDER BY 1 DESC

Пример данных в БД

device_type
dt1
dt1
dt1
dt2
dt2
dt3
dt4
dt5

ожидаемый результат

3 dt1
2 dt2
3 other

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Я бы сделал это.

SELECT COUNT(*) AS C1,device_type FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C1 > 1 
    ORDER BY 1 DESC
Union

SELECT Sum(1),'OTHERS'FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C1 =1
    ORDER BY 1 DESC
3 голосов
/ 09 февраля 2012

Вы также можете попробовать:

SELECT SUM(C1) AS C1, CASE WHEN C1 = 1 THEN 'other' ELSE device_type END as device_type
FROM (  SELECT  COUNT(*) AS C1,
                device_type 
        FROM stat 
        WHERE stat_date = '2012-02-08' 
        GROUP BY device_type) A
GROUP BY CASE WHEN C1 = 1 THEN 'other' ELSE device_type END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...