作者:
Litfal (Litfal)
2014-08-12 12:48:26資料庫名稱:SQL Server
資料庫版本:均可
內容/問題描述:
有辦法在一次Table scan中,就做掉多個條件欄位的統計嗎?
例如,我要統計某次考試中,每個分數區間的總人數,
如 60~69、70~79、80~89、90~100 區間的個別人數。
邏輯上來說應該掃一次、分別統計就夠了。
但SQL語法我只能寫成4次的table scan,像這樣
SELECT(
SELECT COUNT(*)
FROM [Test]
WHERE [Test].[Score] >= 90 && [Test] <= 100) AS [Up90Count],
SELECT COUNT(*)
FROM [Test]
WHERE [Test].[Score] >= 80 && [Test] < 90) AS [Up80Count],
(略)
這樣是跑4個table scan。
當然可以把Score加Index,但因為這邊舉的只是最簡單的例子。
有時情況並不能把所有條件參數都Index。
作者:
bohei (run and fall)
2014-08-12 12:54:00先用CASE分成各區間,例如90~100區間1,80~89區間2每筆都區分出區間後,再對分出的區間做GROUP COUNT
作者:
Litfal (Litfal)
2014-08-12 14:42:00可以耶! 那想再請教一下,如果要分別統計兩個欄位呢?例如說想一次統計學生的英文和數學分數,雖然查兩次也行
作者:
bohei (run and fall)
2014-08-12 15:25:00應該是無法,因為你那兩個成績的GROUP是不相關的頂多在子查詢中先把英文跟數學的區間都分好,但在主查詢的部分還是要分成兩次來查詢(GROUP)你先把你想看到的結果結構畫出來吧~如果你要看到的是英文0~10/數學0~10,英文0~10/數學11~20..說不定一次GROUP就可以了
作者:
Litfal (Litfal)
2014-08-13 00:44:00感謝!之所以會有這種想法,是覺得,既然都是全表走訪一次為什麼不能多統計一些東西呢?