mysql
中新手常见的一个小错误
SCORE(SNO CNO DEGREE) 👈表
CREATE TABLE `SCORE` (
`SNO` varchar(3) NOT NULL,
`CNO` varchar(5) NOT NULL,
`DEGREE` decimal(10,1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
SELECT SNO,CNO FROM SCORE GROUP BY SNO HAVING
DEGREE >= max(DEGREE)
是否写过如上所示代码
你需要查询Score表中的最高分的学生学号和课程号。
你通过group by分组使用having来进行判断,但是这里having后max(DEGREE)选出每一组最大的而不知道DEGREE那一组与其对比。但是左边的DEGREE并不知道是那一行的数据,所以会报错。改进
方案一
SELECT SCORESNO,CNO FROM SCORE WHERE
DEGREE >= (SELECT MAX(DEGREE) FROM SCORE);
方案二
SELECT SNO,CNO FROM SCORE where
DEGREE IN (SELECT MAX(DEGREE) FROM SCORE);