Ich versuche, ein wenig auf eine Aussage zu erweitern, dass ich letzte Woche Hilfe erhalten habe. Wie Sie sehen können, richte ich eine temporäre Tabelle ein und füge Reihen von Schülerdaten aus einem kürzlich durchgeführten Test für ein paar Dutzend Schulen ein. Wenn die Zeilen eingefügt werden, werden sie nach der Punktzahl sortiert (totpct_stu, hoch zu niedrig) und die Zeilennummer wird hinzugefügt, wobei 1 die höchste Punktzahl usw. darstellt.Modifizieren MySQL INSERT-Anweisung, um das Einfügen bestimmter Zeilen zu unterlassen
Ich habe gelernt, dass es einige Probleme in der Schule gab. 9999 in SMITHs Klasse (jeder Schüler machte eine perfekte Punktzahl und sie waren die einzigen Schüler im Distrikt). Also möchte ich SMITHs Klasse nicht importieren.
Wie Sie sehen können, habe ich SMITHs Klasse gelöscht, aber das hat die Zeilennummerierung für den Rest des Schülers in der Schule durcheinander gebracht (z. B. Highscore row_number ist jetzt 20, nicht 1).
Wie kann ich die INSERT-Anweisung ändern, um diese Klasse nicht einzufügen?
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' ;
Nun, das bekommt es. Ich hatte folgendes versucht, aber die Frage wurde in der Luft und hörte nicht auf. Vielen Dank! – dave
... WHERE Klasse = '05' UND totpct_stu> = 1 UND NICHT IN (wählen * aus sci_rpt wobei sch_code = '9999' und teachername = 'SMITH') ... – dave