我有一个问题,我为自己创造了一个挑战,我需要你的帮助。
我有两张桌子。 [学生] - 其栏目包括姓名,课程,分数 [gradingscheme] - 其列包括字母,上部,下部
[gradingscheme]表基本上用作查找表,这样如果我的[学生]得分在[gradingscheme]的上下边界之间,它就会占用字母列的文本值。 (我知道你可以简单地做一个案例,然后分配一个字母等级,但我试图扩大我的知识基础)
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()
这是我到目前为止所做的,它是我试图在这次挑战中取代的UPDATE / SET部分。我不知道如何执行此操作。任何帮助表示赞赏!
答案 0 :(得分:1)
SELECT 90 BETWEEN 90 AND 100;
就像SELECT 90 BETWEEN 80 AND 90;
一样评估为真。您应该更喜欢使用范围,如90-100,80 - 89,70 - 79,...... SELECT s.name, s.course, g.letter FROM students s, gradingscheme g WHERE s.score BETWEEN g.lower AND g.upper;
。您甚至可以创建一个视图来自动完成此操作。这样可以避免数据冗余。UPDATE students SET letterGrade = (SELECT letter FROM gradingscheme WHERE score BETWEEN lower AND upper);
之类的内容。