[英]MYSQL SELECT CASE with SUM and MAX
在這個項目中,我試圖創建一個查詢,該查詢根據大學生的成績返回大學生的GPA總分。 我正在使用MySQL 5.7.19,數據存儲如下:
CourseID Grade
5 A
8 D-
4 B-
8 B+
2 A
我使用CASE語句將字母等級轉換為數字,然后將MAX函數與GROUP BY結合使用,以從多次修讀的課程中獲得更高的成績(在本例中為課程8)...
SELECT MAX(
CASE WHEN Grade = 'A+' OR Grade = 'A' THEN 4
WHEN Grade = 'A-' THEN 3.67
WHEN Grade = 'B+' THEN 3.33
WHEN Grade = 'B' THEN 3
WHEN Grade = 'B-' THEN 2.67
WHEN Grade = 'C+' THEN 2.33
WHEN Grade = 'C' THEN 2
WHEN Grade = 'C-' THEN 1.67
WHEN Grade = 'D+' THEN 1.33
WHEN Grade = 'D' THEN 1
WHEN Grade = 'D-' THEN 0.67
ELSE 0 END) AS Grade
FROM courses_taken WHERE Grade IS NOT NULL AND Grade != 'W'
GROUP BY CourseID
效果很好,我得到以下結果:
Grade
4.00
2.67
3.33
4.00
但是我需要獲取這些值的總和,當我嘗試使用SUM函數時,我得到一個錯誤:
SELECT SUM(MAX(
CASE WHEN Grade = 'A+' OR Grade = 'A' THEN 4
WHEN Grade = 'A-' THEN 3.67
WHEN Grade = 'B+' THEN 3.33
WHEN Grade = 'B' THEN 3
WHEN Grade = 'B-' THEN 2.67
WHEN Grade = 'C+' THEN 2.33
WHEN Grade = 'C' THEN 2
WHEN Grade = 'C-' THEN 1.67
WHEN Grade = 'D+' THEN 1.33
WHEN Grade = 'D' THEN 1
WHEN Grade = 'D-' THEN 0.67
ELSE 0 END)) AS Total
FROM courses_taken WHERE Grade IS NOT NULL AND Grade != 'W'
GROUP BY CourseID
錯誤1111(HY000):無效使用組功能
我嘗試刪除GROUP BY子句,但出現相同的錯誤。 我也刪除了MAX和GROUP BY,但是效果很好,但是我得到了所有成績的總和,這不是我想要的。 我想知道我到底在做什么錯,或者是否有其他方法可以做到這一點。
謝謝。
您不能在同一查詢中堆疊多個聚合表達式。 訣竅是對內部聚合使用子查詢,然后將其包裝在第二個聚合的另一個查詢中。
SELECT SUM(Grade) Total
FROM (
SELECT MAX(
CASE WHEN Grade = 'A+' OR Grade = 'A' THEN 4
WHEN Grade = 'A-' THEN 3.67
WHEN Grade = 'B+' THEN 3.33
WHEN Grade = 'B' THEN 3
WHEN Grade = 'B-' THEN 2.67
WHEN Grade = 'C+' THEN 2.33
WHEN Grade = 'C' THEN 2
WHEN Grade = 'C-' THEN 1.67
WHEN Grade = 'D+' THEN 1.33
WHEN Grade = 'D' THEN 1
WHEN Grade = 'D-' THEN 0.67
ELSE 0 END) AS Grade
FROM courses_taken WHERE Grade IS NOT NULL AND Grade != 'W'
GROUP BY CourseID) max_grade
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.