2016-04-10 9 views
0

は私が挑戦として自分のために作成した問題を抱えていると私はあなたの助けを必要としています。のPython sqlite3の値の検索

私は2つのテーブルを持っています。 [学生] - その列名、コースがあり、 [gradingscheme]スコア - その列の文字が含まれ、上、下

を[gradingscheme]テーブルには、基本的には[からの場合、私のスコアように、ルックアップテーブルとして機能するために存在します学生] [gradingscheme]、それは文字列のテキスト値をとるから、上限と下限の間にあります。 (私はTHEN手紙グレードを割り当てることがWHEN、あなたは、単に、CASEを行うことができますことを承知していますが、私は私の知識基盤を拡大しようとしている)

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

あなたはこれまでにどのようなコードを試してみましたか? – tfv

+0

コードを表示してください。あなたはどこにいらっしゃいますか? – TheRandomGuy

答えて

1
  1. あなたの採点方式があいまいです。例えば。 SELECT 90 BETWEEN 90 AND 100;SELECT 90 BETWEEN 80 AND 90;と同じように、真と評価されます。おそらく、90-100、80-89、70-79、...のような範囲を使うべきでしょう。
  2. 本当に、スチューデントテーブルにグレーディングレターを追加する必要がありますか?通常、そのような選択が行われるときはいつも、グレーディングスキームテーブルからの文字に単に参加するだけです。例えば。 SELECT s.name, s.course, g.letter FROM students s, gradingscheme g WHERE s.score BETWEEN g.lower AND g.upper;。これを自動的に行うためのビューを作成することもできます。これにより、データの冗長性が回避されます。
  3. 実際にstudentsテーブルに明示的にグレーディングを追加する場合は、UPDATE students SET letterGrade = (SELECT letter FROM gradingscheme WHERE score BETWEEN lower AND upper);のようなものを試すことができます。
+0

ありがとうございました!あなたの提案#2はまさに私が後にしたものでしたが、わかりませんでした。したがってレターグレードの列を作成しようとする試みが貧弱です。 –