关于一道 SQL题目

2024-12-02 22:47:30
推荐回答(2个)
回答1:

你这些问题,其实就是一个知识点,没有正确理解GROUP BY的功能

一、GROUP BY 表示分组,但是不是随便哪些字段分组都可以,SELECT后面的所有字段,除了SUM、COUNT、AVG等汇总统计字段之外,其它的都必须放在GROUP BY里面进行分漏笑组,所以,下面这样的语句是错误的:
select name, course, score from student group by name having sum(score) >75
系统会提示你course, score 两个字段都应该放在GROUP BY 后返链含面进行分组
真正理解了GROUP BY的功能与限唤烂制之后,你上面的全部问题都会明白

二、GROUP BY应该在WHERE的后面、在ORDER BY的前面

另外,IN确实效率不好,但是格式最容易理解,所以还是会经常看见

补充:
select * from student where name like '张%' group by name having avg(score) > 75
肯定是错误的,上面说得非常清楚,你的*代表的那些所有字段,都应该出现在GROUP BY 里面

回答2:

题目要求的东西确实可以用N多方兆链法得出同样的结果
其实标准答案也是出题人的扰猜蔽喜好,不用计较
而且这种只有几条数据的表,无论用什么影响的效率都不会太大

GROUP BY 关键字一定要放到 WHERE 的后边吗?回答:yes

你给的另一个人的答案,好像错了吧?sum(score)代表的缓州是总分,可题目要求的是平均分吧?而且group by的用法不对,聚函数没用上,并且最后group by的东西确实少了

-----------补充的不正确----------
你前边如果select *的话,你有多少列你最后就要group by多少列