今天工作碰到下面問題。
例如MY_LOG
資料表有下面資料,裡面記錄每次客戶(CUST_ID
)進行操作時的狀態(STATUS
)。
+----+---------+--------+
| ID | CUST_ID | STATUS |
+----+---------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 2 |
| 4 | 3 | 3 |
| 5 | 1 | 1 |
| 6 | 1 | 2 |
| 7 | 1 | 3 |
| 8 | 2 | 1 |
| 9 | 2 | 2 |
+----+---------+--------+
我想將以上資料依不同CUST_ID
分類並總計所屬STATUS
的數量如下。
+---------+----------+----------+----------+
| CUST_ID | STATUS_1 | STATUS_2 | STATUS_3 |
+---------+----------+----------+----------+
| 1 | 2 | 2 | 1 |
| 2 | 1 | 2 | 0 |
| 3 | 0 | 0 | 1 |
+---------+----------+----------+----------+
但試了FULL OUTER JOIN
或UNION
都無法達到想要的結果。最後把問題丟到stackoverflow上問,沒兩分鐘就有人回答,不虧是工程師的聖地。
SELECT
CUST_ID,
SUM(CASE WHEN STATUS = 1 THEN 1 ELSE 0 END) STATUS_1,
SUM(CASE WHEN STATUS = 2 THEN 1 ELSE 0 END) STATUS_2,
SUM(CASE WHEN STATUS = 3 THEN 1 ELSE 0 END) STATUS_3
FROM MY_LOG
GROUP BY
CUST_ID
原來Aggregate Functions中還可以先用CASE WHEN ... THEN ... ELSE
篩選後再處理。
沒有留言:
張貼留言