2012-02-09 21 views
5

Tôi có truy vấn trả về số hàng của một device_type khác biệt xuất hiện nhiều lần.Làm cách nào để tóm tắt các hàng chỉ xảy ra một lần?

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

Tôi muốn tóm tắt (count = 1 CÓ) hàng còn lại là 'người khác'

Làm thế nào tôi có thể thêm tổng COUNT (*) và 'người khác' như cột thứ hai sau truy vấn?

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

dữ liệu mẫu trong DB

device_type 
dt1 
dt1 
dt1 
dt2 
dt2 
dt3 
dt4 
dt5 

dự kiến ​​kết quả

3 dt1 
2 dt2 
3 other 
+0

không tác phẩm này với u 'CHỌN DEVICE_TYPE 'devType', COUNT (*) 'người khác' từ stat nơi (điều kiện) groupby DEVICE_TYPE có khác> 1' – Deeptechtons

Trả lời

3

Bạn cũng có thể thử:

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 
+0

Tôi đã cùng suy nghĩ như thế này; chỉ cần thay thế cú pháp trường hợp bằng "if (C1 = 1, 'others', device_type)" trong cả hai lựa chọn bên ngoài và nhóm theo. –

4

tôi sẽ làm điều này.

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 
+1

Trừ trường hợp này không hoạt động. Bạn không thể áp dụng số tiền trước khi bạn đã thực hiện số đếm trong lần chọn thứ hai. –

Các vấn đề liên quan