Я пытаюсь немного рассказать о заявлении о том, что я получил помощь на прошлой неделе. Как вы можете видеть, я создаю временную таблицу и вставляю строки данных студентов из недавно проведенного теста для нескольких десятков школ. Когда строки вставлены, они сортируются по счету (totpct_stu, от высокого к низкому), а row_number добавляется, причем 1 представляет наибольший балл и т.д.
Я узнал, что в школе № 9999 были проблемы в классе SMITH (каждый студент сделал отличную оценку, и они были единственными учениками в этом районе). Поэтому я не хочу импортировать класс SMITH.
Как вы можете видеть, я удалил класс SMITH, но это испортило нумерацию строк для оставшейся части ученика в школе (например, высокий балл row_number теперь равен 20, а не 1).
Как я могу изменить инструкцию 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' ;
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 ;
Что-то в этом направлении может работать. В тестовой среде измените это значение
WHERE grade = '05' AND
totpct_stu >= 1 -- has a valid score
к этому
WHERE grade = '05' AND
totpct_stu >= 1 AND NOT -- has a valid score
(sch_code = '9999' AND teachername = 'SMITH')
Но, если бы я был вами, я бы ожидал, что исключения будут повторяющейся проблемой. Может быть, не часто, но регулярно повторяется. Это предложило бы основанный на таблицах подход - хранение вещей, которые должны быть исключены в таблице, а не "их хранение" в операторах SQL.