2012-08-05 68 views
0

下面是我的查詢和它的輸出。是否有可能建立我的查詢只有一個選擇語句(我有兩個在我的查詢)?它用於性能目的。是否有可能建立我的查詢只有一個選擇語句?

WITH GradePassFail AS (
    SELECT 
     Subject, 
     Grade, 
     CASE WHEN Grade >= 50 THEN 1 ELSE 0 END AS Pass, 
     CASE WHEN Grade < 50 THEN 1 ELSE 0 END AS Fail 
    FROM Grade_report 
) 
SELECT Subject, MAX(Grade) AS Grade, SUM(Pass) AS Pass, SUM(Fail) AS Fail 
FROM GradePassFail 
GROUP BY Subject 

enter image description here

+1

the數據庫將優化語句。如果這可以用單個語句(可以)編寫,那麼數據庫將重寫這一個以達到最佳效果。 – 2012-08-05 04:48:48

+0

@kevin - 不要刪除問題的細節,以便您的問題也可以幫助其他人。 – Geoffrey 2012-08-05 05:43:36

回答

3

您可以將SUM函數中執行CASE報表合格/不合格......那麼你不需要CTE:

SELECT 
    Subject, 
    MAX(Grade) Grade, 
    SUM(CASE WHEN Grade >= 50 THEN 1 ELSE 0 END) AS Pass, 
    SUM(CASE WHEN Grade < 50 THEN 1 ELSE 0 END) AS Fail 
FROM 
    Grade_report 
GROUP BY Subject 

您可以驗證此:

http://sqlfiddle.com/#!3/99cd4/7

+0

非常感謝! – kevin 2012-08-05 05:21:47

+0

@kevin如果你看執行計劃,你會發現它們是相同的。你剛剛做的就是所謂的[過早優化](http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize) - 基本上,你在非問題上浪費了時間,甚至可以說爲此犧牲了一些可讀性。 – Lucero 2012-08-05 11:31:26

相關問題