检查sql:查询只选修了一门课程的全部学生的学号和姓名 SELECT stu.sid, stu.sname, COUNT(sc.sid) sid_count FROM student stu JOIN sc ON stu.sid = sc.sid WHERE sid_count == 1 GROUP BY stu.sid, stu.sname, sc.cid;
时间: 2024-04-26 09:20:31 浏览: 182
在这个 SQL 查询语句中,使用了聚合函数 COUNT(),但是在 WHERE 子句中不能使用别名,所以应该使用 HAVING 子句代替 WHERE 子句进行条件筛选。正确的 SQL 查询语句如下:
SELECT stu.sid, stu.sname
FROM student stu
JOIN sc ON stu.sid = sc.sid
GROUP BY stu.sid, stu.sname
HAVING COUNT(sc.cid) = 1;
这条语句将返回只选修了一门课程的全部学生的学号和姓名。
相关问题
检查这个sql语法有无错误SELECT stu.sid,stu.sname,avg(SELECT avg(sid) FROM sc GROUP BY sid;) as savg FROM student stu WHERE savg > 50;
这个 SQL 语句有语法错误。正确的语句应该是:
```
SELECT stu.sid, stu.sname, AVG(s.avg) as savg
FROM student stu
INNER JOIN (
SELECT sid, AVG(score) as avg
FROM sc
GROUP BY sid
) s ON stu.sid = s.sid
WHERE savg > 50;
```
在这个语句中,我使用了内部查询来计算每个学生的平均分,并将其与主查询中的学生表连接起来。然后,使用 AVG 聚合函数计算每个学生的平均分,最后使用 WHERE 子句筛选出平均分大于 50 的学生。
SELECT stu.sid,stu.sname, c.cname, sc.score FROM student stu, course c, sc WHERE sc.score < 60 AND c.cname = "python" GROUP BY c.cname;检查语法
这是一条 SQL 查询语句,用于查询选修Python课程且成绩低于60分的学生信息,按照课程名称分组。但是,这条语句存在一个问题,就是在 GROUP BY 子句中只有一个字段 c.cname,而在 SELECT 子句中却有四个字段,需要使用聚合函数(如 COUNT、SUM、AVG 等)对其它字段进行处理并指定别名。可以修改成以下语句:
```
SELECT stu.sid, stu.sname, c.cname, MIN(sc.score) AS min_score
FROM student stu
JOIN sc ON stu.sid = sc.sid
JOIN course c ON sc.cid = c.cid
WHERE c.cname = 'python' AND sc.score < 60
GROUP BY stu.sid, stu.sname, c.cname;
```
这条语句使用了 JOIN 连接三个表,使用 MIN 函数求出每个学生选修 Python 课程的最低分数,并且为其指定了别名 min_score。同时,还将 GROUP BY 子句中的字段修改为 stu.sid, stu.sname, c.cname。
阅读全文