需求:依地區排序,但每個地區只顯示一筆,然後循環下一輪,直到資料耗盡。
SELECT NAME, LOCAL, AGE,
XH = (SELECT COUNT(*) FROM LIST A WHERE A.LOCAL = B.LOCAL AND A.NAME < B.NAME)
FROM LIST B
ORDER BY XH, LOCAL;
原理:計算同地區中名字排序前的筆數作為輪詢順序。
需求:記錄某人在某天的第幾次外出。
SELECT A.NAME, A.DT,
(SELECT COUNT(NAME) FROM TABLENAME
WHERE NAME = A.NAME
AND YEAR(DT) = YEAR(A.DT)
AND MONTH(DT) = MONTH(A.DT)
AND DAY(DT) = DAY(A.DT)
AND DT <= A.DT) AS NCOUNT
FROM TABLENAME A
ORDER BY A.DT;
需求:ID 為主鍵,輸出該名稱截至當前 ID 的累計出現次數。
SELECT ID, 名稱,
(SELECT COUNT(ID) FROM TABLE1 WHERE 名稱 = AAA.名稱 AND ID <= AAA.ID) AS 次數
FROM TABLE1 AAA;
三者皆屬相關子查詢計數模式:外層逐列掃描,內層統計滿足條件的歷史筆數。適用於中小資料量;大數據量建議改用視窗函數 ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)。