首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 查詢同時返回資料與總筆數:COUNT 視窗函數或子查詢

     編輯:程式設計綜合問答

需求:SELECT userId FROM user WHERE userId < 500 同時取得符合條件的總筆數。

方案一:視窗函數 (標準 SQL,支援 PostgreSQL、SQL Server 2012+、Oracle、MySQL 8.0+)

SELECT userId, COUNT(*) OVER() AS total_count
FROM user
WHERE userId < 500;
  • 每列附帶總筆數,不改變回傳列數。
  • 效能佳,單次掃描。

方案二:子查詢 (相容所有資料庫)

SELECT userId, (SELECT COUNT(*) FROM user WHERE userId < 500) AS total_count
FROM user
WHERE userId < 500;

方案三:兩次查詢 (簡單、適合分頁場景)

-- 1. 取資料
SELECT userId FROM user WHERE userId < 500 LIMIT 20 OFFSET 0;
-- 2. 取總數
SELECT COUNT(*) FROM user WHERE userId < 500;

方案四:MySQL SQL_CALC_FOUND_ROWS (已棄用於 8.0)

SELECT SQL_CALC_FOUND_ROWS userId FROM user WHERE userId < 500 LIMIT 20;
SELECT FOUND_ROWS(); -- 返回未 LIMIT 時的總筆數

選型建議

  • 現代資料庫 → 視窗函數 COUNT(*) OVER()。
  • 舊版 MySQL / 簡單專案 → 子查詢或兩次查詢。
  • 分頁元件 → 兩次查詢最清晰,易於快取總數。

避免在應用層迴圈計數,交給資料庫最有效率。

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