-- 統計表總行數(最快,利用表元數據) SELECT COUNT(*) FROM `user`; -- 統計特定欄位非 NULL 行數 SELECT COUNT(`uid`) FROM `user`; -- 統計去重值 SELECT COUNT(DISTINCT `role`) FROM `user`;
建議:單純統計行數用 COUNT(*),InnoDB 會優化;避免 COUNT(字串欄位)(較慢)。
connect_errno) die('連接失敗: ' . $conn->connect_error);
$sql = "SELECT COUNT(*) AS `total` FROM `user`";
$row = $conn->query($sql)->fetch_assoc();
echo "共有用戶: {$row['total']} 位";
$conn->close();
需求:統計及格(≥60)與不及格(<60)人數。
SELECT COUNT(*) FROM `score` WHERE `score` >= 60; SELECT COUNT(*) FROM `score` WHERE `score` < 60;
SELECT
`name`,
SUM(IF(`score` >= 60, 1, 0)) AS `pass_count`,
SUM(IF(`score` < 60, 1, 0)) AS `fail_count`
FROM `score`
GROUP BY `name`;
原理:條件成立賦值 1,否則 0,SUM 即為計數。CASE WHEN 同理。
需求:按部門統計「在職」、「離職」、「面試中」三種狀態人數。
SELECT
`dept`,
SUM(CASE WHEN `status` = 1 THEN 1 ELSE 0 END) AS `active`,
SUM(CASE WHEN `status` = 2 THEN 1 ELSE 0 END) AS `left`,
SUM(CASE WHEN `status` = 3 THEN 1 ELSE 0 END) AS `interview`,
COUNT(*) AS `total`
FROM `employee`
GROUP BY `dept`;
SELECT
`year`,
SUM(CASE WHEN `quarter` = 1 THEN `amount` END) AS `Q1`,
SUM(CASE WHEN `quarter` = 2 THEN `amount` END) AS `Q2`,
SUM(CASE WHEN `quarter` = 3 THEN `amount` END) AS `Q3`,
SUM(CASE WHEN `quarter` = 4 THEN `amount` END) AS `Q4`,
SUM(`amount`) AS `Total`
FROM `sales`
GROUP BY `year`;
掌握 COUNT(*)、SUM(IF/CASE)、GROUP BY 組合,能用單一 SQL 完成複雜多維度統計,大幅減少應用層迴圈與多次查詢。配合索引、分區、緩存,滿足高併發報表需求。