首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 統計專營店男女性別人數 SQL 實作

     編輯:Oracle 資料庫相關知識

展示如何使用條件聚合(CASE WHEN)搭配 LEFT JOIN,單次掃描即可完成各專營店男女人數統計,適用於 Oracle、PostgreSQL、SQL Server 等主流資料庫。

資料模型

  • DCAD_USER:使用者主檔,含 UARTERS_ID(專營店代碼)、SEX(1=男、0=女)
  • DCAD_UARTERS:專營店主檔,含 UARTERS_ID、UARTERS_NAME

核心 SQL

SELECT 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 ...) 替代多次掃描或子查詢,效能最佳
  • LEFT JOIN 保留無人店: 即使專營店無使用者,仍會列出且計數為 0
  • 可擴展性: 新增性別類別只需增加 SUM(CASE ...) 欄位,無需修改 JOIN 邏輯

進階:轉換為樞紐報表(PIVOT,11g+)

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;

分層架構對應

原始碼註解顯示專案採用四層架構:

  • Web_THBC(表示層 .aspx)
  • BLL_THBC(業務邏輯層)
  • DAL_THBC(資料存取層,執行上述 SQL)
  • Model_THBC(實體類別)
  • DbHelper(資料庫連線工具類)

作者:ershouyage

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved