我有一個表,看起來是這樣的:如何做 '分級' 純(即ANSI)SQL
CREATE TABLE student_results(ID整數,名稱VARCHAR(32),得分浮動);
讓我們做出以下兩個假設:
- 假設比分從0到最大的100
- 假設我想年級學生在10
所以我想申請以下等級:
Score Grade Awarded
0-10 GRADE9
10-20 GRADE8
20-30 GRADE7
30-40 GRADE6
40-50 GRADE5
50-60 GRADE4
60-70 GRADE3
70-80 GRADE2
80-90 GRADE1
99-100 GENIUS
我想編寫一個SQ L查詢需要輸入以下參數:
lowest score: 0 in this example
highest score: 100 in this example
'step' size: 10 in this example
儘可能地,如果可能的話,我想用ANSI SQL編寫這樣的查詢。如果我必須選擇一個數據庫,然後按優先順序,它必須是:
- PostgreSQL的
- MySQL的
可能有人請解釋我是如何可能能寫的使用上表作爲示例進行這種評分的SQL查詢?
[編輯]
Sample input data
1, 'homer', 10.5
2. 'santas little helper', 15.2
3, 'bart', 20.5
4, 'marge', 40.5
5. 'lisa', 100
我將有一個SQL函數grade_rank() - 即排名學生:
的功能grade_rank()的參數是:
1st argument: LOWEST possible score value
2nd argument: HIGHEST possible score value
3rd argument: step size, which determines the levels/divisions between the ranks
select id, name, grade_rank(0,100, 10) grade from student_scores;
的輸出(基於上面的輸入)應該是:
1, homer, GRADE9
2. santas liitle helper GRADE9
3, bart, GRADE8
4, marge, GRADE6
5. lisa, GENIUS
你能從這樣的查詢發表您的預期輸出的例子? – Oded 2010-06-22 10:06:33
你問的是如何使用'BETWEEN'而不是'='做一個連接? – 2010-06-22 10:12:41
您的原始評分列表僅處理整數,但編輯部分中的示例數據指的是在原始邊界之間的實數。例如。 10.5在GRADE9和GRADE8之間。您應該編輯一個或另一個,以準確顯示您希望如何工作。我*認爲*到目前爲止提供的答案只適用於整數值。 – Mike 2010-06-22 11:17:56