展示如何使用條件聚合(CASE WHEN)搭配 LEFT JOIN,單次掃描即可完成各專營店男女人數統計,適用於 Oracle、PostgreSQL、SQL Server 等主流資料庫。
DCAD_USER:使用者主檔,含 UARTERS_ID(專營店代碼)、SEX(1=男、0=女)DCAD_UARTERS:專營店主檔,含 UARTERS_ID、UARTERS_NAMESELECT dua.UARTERS_ID,
dua.UARTERS_NAME,
SUM(CASE WHEN du.SEX = '1' THEN 1 ELSE 0 END) AS MAN_COUNT,
SUM(CASE WHEN du.SEX = '0' THEN 1 ELSE 0 END) AS WOMAN_COUNT
FROM DCAD_USER du
LEFT JOIN DCAD_UARTERS dua ON du.UARTERS_ID = dua.UARTERS_ID
GROUP BY dua.UARTERS_ID, dua.UARTERS_NAME
ORDER BY dua.UARTERS_ID;
SUM(CASE ...) 替代多次掃描或子查詢,效能最佳SUM(CASE ...) 欄位,無需修改 JOIN 邏輯SELECT *
FROM (
SELECT dua.UARTERS_NAME, du.SEX
FROM DCAD_USER du
LEFT JOIN DCAD_UARTERS dua ON du.UARTERS_ID = dua.UARTERS_ID
)
PIVOT (
COUNT(*) FOR SEX IN ('1' AS MAN_COUNT, '0' AS WOMAN_COUNT)
)
ORDER BY UARTERS_NAME;
原始碼註解顯示專案採用四層架構:
作者:ershouyage