GROUP BY HAVING 求解释

清溪蓝郁 2011-01-21 05:19:36
1)SELECT Sno,COUNT(Cno) FROM SC
GROUP BY Sno
HAVING COUNT(COUNT(Grade>90))>3;
2)SELEECT Sno,COUNT(Cno) FROM SC
WHERE Grade>90
GROUP BY Sno
HAVING COUNT(*)>3;

在mysql中进行了验证,
1)提示以下错误信息:
ERROR 1111 (HY000):Invalid use of group function
2)Empty set(0.00 sec)
说明在SC表中,没有满足条件的元组

谁能帮忙解释一下1)错误的原因?
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2011-01-22
  • 打赏
  • 举报
回复
HAVING COUNT(COUNT(Grade>90))>3;


having count(case when grade>90 then 1 end)>3
shine333 2011-01-22
  • 打赏
  • 举报
回复
WHERE是对行筛选
在WHERE的基础上,GROUP BY进行分组
在GROUP BY之后,HAVING对组再进行筛选
最后进行ORDER BY操作

所以你的题目,应当就是3楼的答案

SELECT Sno,COUNT(Cno) FROM SC
where grade>90 -- 只取所有分数 > 90的人
GROUP BY Sno -- 按照Sno分组
HAVING COUNT(1)>3; -- 只取组里面 > 90分条件的人数超过3的组,其余分组舍弃

翻译过来,就是按照Sno分组,取出所有分数超过90分人数大于3人的组,及相应人数
mysqldbd 2011-01-21
  • 打赏
  • 举报
回复
HAVING COUNT(COUNT(Grade>90))>3;

没有这个用法,having里面不能使用连续2个count()嵌套函数。

看了你的sql,猜测了下业务逻辑,改写sql如下:

SELECT Sno,COUNT(Cno) FROM SC
where grade>90
GROUP BY Sno
HAVING COUNT(1)>3;
小小小小周 2011-01-21
  • 打赏
  • 举报
回复
1) 1个count() 就够了;
ACMAIN_CHM 2011-01-21
  • 打赏
  • 举报
回复
HAVING COUNT(COUNT(Grade>90))>3; 语法错误,没有这个COUNT(COUNT

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧