2011-01-17 4 views
0

私は先週の助けを受けた声明で少し拡張しようとしています。ご覧のとおり、私は一時的なテーブルをセットアップし、数十の学校の最近実施されたテストの学生データの行を挿入しています。行が挿入されると、スコア(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' ; 

答えて

1
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 
     AND NOT (sch_code = '9999' AND 
     teachername = 'SMITH') 
ORDER 
    BY sch_code, totpct_stu DESC ; 
+0

さて、それはそれを取得します。私は次のことを試しましたが、クエリは空中になり、止まらなくなりました。ありがとう! – dave

+0

... WHERE grade = '05' AND totpct_stu> = 1 AND NOT IN (select * from sci_rpt where sch_code = '9999' and teachername = 'SMITH')... – dave

0

。私があなただったら、テスト環境では、この

WHERE grade = '05' AND 
     totpct_stu >= 1 AND NOT -- has a valid score 
     (sch_code = '9999' AND teachername = 'SMITH') 

にこの

WHERE grade = '05' AND 
     totpct_stu >= 1 -- has a valid score 

を変更しかし、私は除外が繰り返し発生する問題であることを期待したいです。多分頻繁ではないが、定期的に繰り返される。これは、SQL文に "格納する"のではなく、テーブルに除外されるものを格納するテーブルベースの手法を提案します。

+0

ありがとう!はい、これまで私は「一度」のプロジェクトに取り組んでいますが、私はあなたに同意します。 – dave

関連する問題