2014-03-26 75 views
0

可以使用此SQL查詢的一些幫助。NULL不計算在合計SQL中

比方說,我有一個名爲StudentGrades的表格,其中包含學生列表和一個表示他們是否通過了班級的標誌。假設有大部分尚未獲得分數的學生,我如何計算已通過/未通過或未獲得分數的學生的當前百分比。

ID  LastName   GradeGiven 
------------------------------- 
1  Bueller   PASS 
2  Smith   FAIL 
3  Carter   FAIL 
4  Howell   NULL 
5  Clinton   PASS 
6  Brown   FAIL 
. 
. 
. 
48  Jones   NULL 
49  Frank   NULL 
50  Jenkins   NULL 

我想創建一個查詢,可以顯示通過,失敗,還沒有分配成績的學生人數。要做到這一點,我創建這個查詢...

SELECT 
    COUNT(GradeGiven) AS "Count of each Grade", 
    GradeGiven, 
    COUNT(GradeGiven * 100.0/(SELECT COUNT(*) from StudentGrades) AS "Percentage" 
FROM 
    StudentGrades 
GROUP BY 
    GradeGiven 

我的問題是,NULL顯示爲具有0計數,即使它是存在的。即使它沒有代表價值,它不應該算一次嗎?如果大多數成績沒有填寫,我預計它會有45個數量和很大比例。然而,這是0.000

Count  GradeGiven   Percentage 
------------------------------------------ 
0   NULL     0.000 
2   PASS     4.000 
3   FAIL     6.000 

回答

2

使用count(*)count(1)

SELECT COUNT(*) AS "Count of each Grade", 
     GradeGiven, 
     COUNT(*) * 100.0/(SELECT COUNT(*) from StudentGrades) AS "Percentage" 
FROM StudentGrades 
GROUP BY GradeGiven; 

混淆了count(<column name>)就是爲什麼我不認爲你應該使用,至少在SQL初學者。你可以在這個問題上閱讀更多關於我的意見here

+0

這很好!謝謝。我會檢查你的鏈接,瞭解更多爲什麼'count()'是一個不好的選擇。 – webworm