gpt4 book ai didi

mysql - 在 where 子句 : invalid use of group function 中使用计数

转载 作者:行者123 更新时间:2023-11-29 04:00:10 25 4
gpt4 key购买 nike

我是数据库初学者。我正在练习 mySQL。我有两个表:

STUDENTS
sno | sName | age

ENROLL
sno | cno

我想要一份注册了不止一门类(class)的所有学生的列表。当我尝试这个时:

select distinct s.* from student s, enroll e 
where ((s.sno = e.sno) and (count(e.sno)>1));

我收到这个错误:

"Invalid Use of group function"

你能告诉我为什么我不能在 where 子句中使用 count 或者这里到底有什么问题吗?提前致谢。

编辑:这不是作业题(教授已经贴出答案),我正在纠结这个概念。

最佳答案

您只能使用聚合函数,例如 COUNT()HAVING条款,或在 SELECT GROUP BY 时的子句用来。 WHERE子句对来自 FROM 的行进行操作条款。没有发生聚合,因此聚合函数没有任何意义。

看起来你想要做的是从 ENROLL 表中找到所有出现不止一次的学生。然后您想获得有关这些学生的更多详细信息。可能有很多方法可以做到这一点,但我建议使用子查询。

SELECT s.*
FROM student AS s
JOIN (
SELECT e.sno
FROM enroll AS e
GROUP BY e.sno
HAVING COUNT(*) > 1
) AS e
ON e.sno = s.sno
ORDER BY s.age DESC
LIMIT 10

JOIN 之后的子查询进行第一次计算(哪些学生在 ENROLL 中有多行)并基本上生成一个包含学生 ID 列表的伪表。由于我们正在进行内部联接,因此只有 STUDENT 表中的行具有 sno在我们的子查询中会出现。这基本上由 ON 处理条款。

既然您在评论中说过您希望能够对学生应用额外的条件,我已经在一些示例代码中添加了这种情况。由于该信息来自 STUDENT 表,因此可以在子查询之外完成。您没有具体说明“最年长的学生”是什么意思,所以我只是假设您想要 10 名最年长的学生参加多门类(class)。您应该能够根据自己的需要进行调整。

如果其中任何一个没有意义,请告诉我,我会尝试更详细地解释。

关于mysql - 在 where 子句 : invalid use of group function 中使用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com