私は先週の助けを受けた声明で少し拡張しようとしています。ご覧のとおり、私は一時的なテーブルをセットアップし、数十の学校の最近実施されたテストの学生データの行を挿入しています。行が挿入されると、スコア(totpct_stu、高から低)でソートされ、row_numberが追加され、1が最も高いスコアを表します。MySQL INSERT文を修正して特定の行を挿入しないようにする
学校ではいくつかの問題があることを知りました。スミスのクラスで9999(すべての生徒は完璧な成績を収め、地区で唯一の生徒でした)。だから、私はスミスのクラスをインポートしたくない。
私はスミスのクラスを削除しましたが、これは学校の生徒の残りの行の番号付けを混乱させました(たとえば、高スコアrow_numberは1ではなく20です)。
このクラスを挿入しないようにINSERT文を変更するにはどうすればよいですか?これらの線に沿って何かがうまくいくかもしれない
DROP TEMPORARY TABLE IF EXISTS avgpct ;
CREATE TEMPORARY TABLE avgpct_1
(sch_code VARCHAR(3),
schabbrev VARCHAR(75),
teachername VARCHAR(75),
totpct_stu DECIMAL(5,1),
row_number SMALLINT,
dummy VARCHAR(75)
);
-- ----------------------------------------
INSERT INTO avgpct
SELECT sch_code
, schabbrev
, teachername
, totpct_stu
, @num := IF(@GROUP = schabbrev, @num + 1, 1) AS row_number
, @GROUP := schabbrev AS dummy
FROM sci_rpt
WHERE grade = '05' AND
totpct_stu >= 1 -- has a valid score
ORDER
BY sch_code, totpct_stu DESC ;
-- ---------------------------------------
-- select * from avgpct ;
-- ---------------------------------------
DELETE
FROM avgpct_1
WHERE sch_code = '9999' AND
teachername = 'SMITH' ;
さて、それはそれを取得します。私は次のことを試しましたが、クエリは空中になり、止まらなくなりました。ありがとう! – dave
... WHERE grade = '05' AND totpct_stu> = 1 AND NOT IN (select * from sci_rpt where sch_code = '9999' and teachername = 'SMITH')... – dave