【发布时间】:2011-01-17 02:29:48
【问题描述】:
我正在尝试对上周获得帮助的声明进行一些扩展。如您所见,我正在设置一个临时表并插入来自最近为几十所学校管理的测试的学生数据行。插入行时,按分数排序(totpct_stu,从高到低)并加上row_number,1代表最高分数,以此类推。
我了解到,在 SMITH 的班级中,#9999 学校存在一些问题(每个学生都取得了满分,而且他们是学区唯一这样做的学生)。所以,我不想导入 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' ;
【问题讨论】:
标签: mysql variables insert temp-tables