2016-04-10 45 views
0

我有一個問題,我爲自己創建了一個挑戰,我需要你的幫助。Python sqlite3值查找

我有兩個表。 [學生] - 其列包括名字,當然,得分 [gradingscheme] - 其列包括字母,大寫,小寫

的[gradingscheme表基本上存在於作爲一個查找表,這樣,如果我的分數從[學生]位於[gradingscheme]的上下邊界之間,它代表字母列的文本值。 (我知道,你可以簡單地做一個CASE,WHEN,然後分配一個字母等級,但我想擴大我的知識基礎)

import sqlite3 
conn = sqlite3.connect('example3.db') 
c = conn.cursor() 

c.execute('''         
UPDATE students          
SET LetterGrade = CASE 
    WHEN score between 90 and 100 then 'A' 
    WHEN score between 80 and 90 then 'B' 
    ELSE 'C' 
END 
''')           

c.execute(''' 
SELECT s.name,s.courseid,c.name,c.classroom,s.score,s.LetterGrade 
FROM students AS s 
LEFT OUTER JOIN courses AS c 
WHERE s.courseid=c.courseid 
''')           

import pprint 
pp=pprint.PrettyPrinter() 
pp.pprint(c.fetchall())   

conn.commit() 
conn.close() 

這是我迄今爲止,它是在更新/設置部分,我試圖在這個挑戰中取代。我不知道如何執行此操作。任何幫助表示讚賞!

+0

到目前爲止您嘗試了哪些代碼? – tfv

+0

顯示您的代碼。你卡在哪裏? – TheRandomGuy

回答

1
  1. 您的評分​​方案含糊不清。例如。 SELECT 90 BETWEEN 90 AND 100;的計算結果爲true,就像SELECT 90 BETWEEN 80 AND 90;一樣。你應該更喜歡使用範圍如90-100,80-89,70至79,...
  2. 你真的需要添加評分字母到學生表嗎?通常,只要執行這樣的選擇,就可以簡單地加入gradingscheme表中的字母。例如。 SELECT s.name, s.course, g.letter FROM students s, gradingscheme g WHERE s.score BETWEEN g.lower AND g.upper;。你甚至可以創建一個視圖來自動完成。這可以避免數據冗餘。
  3. 如果您確實想要將學分明確添加到學生表中,您可以嘗試類似UPDATE students SET letterGrade = (SELECT letter FROM gradingscheme WHERE score BETWEEN lower AND upper);
+0

非常感謝!你的建議#2正是我所追求的,但不知道是可能的;因此很難嘗試創建lettergrade列。 –