看板 Database 關於我們 聯絡資訊
SELECT SUM(CASE WHEN [A科目分數] BETWEN 90 AND 100 THEN 1 ELSE 0 END) AS [Up90_A] ,SUM(CASE WHEN [A科目分數] BETWEEN 80 AND 89 THEN 1 ELSE 0 END) AS [Up80_A] ,...... ,SUM(CASE WHEN [B科目分數] BETWEEN 90 AND 100 THEN 1 ELSE 0 END) AS [Up90_B] ,...... FROM [Test] ※ 引述《Litfal (Litfal)》之銘言: : 資料庫名稱: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。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.120.185 ※ 文章網址: http://www.ptt.cc/bbs/Database/M.1408021572.A.525.html