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

MySQL 常用聚合查詢:統計欄位值出現次數

     編輯:MySQL 資料庫相關知識

MySQL 統計某欄位各值出現次數的標準寫法,使用 GROUP BY + COUNT(*),適用於分類統計、頻次分析、資料品質檢核等場景。

核心語句

SELECT `VPDM`, COUNT(*) AS `cnt`
FROM `ipos_qtlsd`
GROUP BY `VPDM`
ORDER BY `cnt` DESC;

關鍵點解析

子句作用注意
SELECT VPDM分組依據欄位 (必須出現在 GROUP BY 中)非聚合欄位必須在 GROUP BY,否則 ONLY_FULL_GROUP_BY 模式報錯
COUNT(*)計算每組行數 (含 NULL 行)COUNT(VPDM) 忽略 NULL,COUNT(*) 含 NULL
GROUP BY VPDM按 VPDM 值分組可多欄位 GROUP BY a,b
ORDER BY cnt DESC按出現次數降序,高頻值優先可加 LIMIT 10 取 Top-N

進階變體

  1. 過濾低頻值 (HAVING):
    SELECT VPDM, COUNT(*) cnt
    FROM ipos_qtlsd
    GROUP BY VPDM
    HAVING cnt > 100
    ORDER BY cnt DESC;
    
  2. 百分比佔比:
    SELECT VPDM, 
           COUNT(*) cnt,
           ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM ipos_qtlsd), 2) pct
    FROM ipos_qtlsd
    GROUP BY VPDM
    ORDER BY cnt DESC;
    
  3. 多欄位組合統計:
    SELECT VPDM, STATUS, COUNT(*) cnt
    FROM ipos_qtlsd
    GROUP BY VPDM, STATUS
    ORDER BY VPDM, cnt DESC;
    
  4. 窗口函數 (MySQL 8.0+) 保留明細行同時顯示聚合:
    SELECT *, COUNT(*) OVER (PARTITION BY VPDM) AS vpdm_cnt
    FROM ipos_qtlsd;
    

效能建議

  • 在 VPDM 上建立索引:CREATE INDEX idx_vpdm ON ipos_qtlsd(VPDM); 使 GROUP BY 走索引掃描 (type=index/ref) 而非全表掃描。
  • 大表統計考慮 EXPLAIN 確認是否使用 Using index for group-by (緊湊索引掃描)。
  • 極大表可用近似算法:SELECT VPDM, COUNT(*) FROM ipos_qtlsd TABLESAMPLE SYSTEM(10) GROUP BY VPDM (需 8.0+ 且表支援)。

掌握 GROUP BY + COUNT 核心模式,靈活組合 HAVING、ORDER BY、窗口函數,滿足 90% 的分類頻次統計需求。

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