Python sqlite3 值查找

Python sqlite3 value lookup

我有一个问题是我为自己创造的挑战,我需要你的帮助。

我有两个 table。 [students] - 其列包括名称、课程、分数 [gradingscheme] - 其列包括字母、上部、下部

[gradingscheme] table 基本上是作为查找 table 存在的,因此如果我的 [students] 分数介于 [gradingscheme] 的上限和下限之间,它会字母列的文本值。 (我知道你可以简单地做一个 CASE,WHEN,THEN 来指定字母等级,但我正在努力扩展我的知识库)

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 部分。我不知道如何执行此操作。感谢您的帮助!

  1. 您的评分方案不明确。例如。 SELECT 90 BETWEEN 90 AND 100; 的计算结果与 SELECT 90 BETWEEN 80 AND 90; 相同。您可能更应该使用 90-100、80 - 89、70 - 79 等范围,...
  2. 您真的需要给学生添加评分信吗table?通常,每当执行 select 时,只需加入评分方案 table 中的字母即可。例如。 SELECT s.name, s.course, g.letter FROM students s, gradingscheme g WHERE s.score BETWEEN g.lower AND g.upper;。您甚至可以创建一个视图来自动完成此操作。这样可以避免数据冗余。
  3. 如果你真的想为学生 table 添加明确的字母评分,你可以尝试 UPDATE students SET letterGrade = (SELECT letter FROM gradingscheme WHERE score BETWEEN lower AND upper);