MySQL查询中having语句的使用场景和用法

说白了,HAVING是在GROUP BY之后进行过滤的,但过滤出来的是聚合后的结果。
你必须明白这一点。

扩展一下,关键是区分WHERE和HAVING的适用场景。
分组前对原始数据进行过滤,如WHERE Score >= 6 0。
HAVING对分组后的聚合结果进行过滤,如HAVING AVG(score) >= 6 0。
还有一点是HAVING后可以写复杂的条件,但核心逻辑要简单。
例如,使用 SUM(score >= 6 0) 来统计通过课程的数量。
我去年在做一个项目时犯了这个错误。
因为我差点写成>而不是>=,所以结果算了一半。
还有一个细节非常重要,比如问题3 中的组合条件:COUNT(c_id) = 2 AND SUM(c_id = '01 ') = 1 这个write方法可以执行,但不能读取。
我建议拆分成临时表,然后合并它们,因为它看起来更优雅。

一开始我以为HAVING只能用于简单的聚合函数,后来发现我错了。
其实也可以使用GROUP_CONCAT等字符串函数,但是一定要小心去重问题。
例如,GROUP_CONCAT(DISTINCT c_id)不能直接在HAVING中使用;必须首先计算它。

注意:如果在 HAVING 之后写入 c_id = '01 ' 会发生错误。
因为c_id是数字类型,应该写成c_id = 1 或c_id <=> '01 '(MySQL特定语法)。
很多人都没有注意到这一点,老实说,这是一个很大的陷阱。

最后,老实说,在写HAVING的时候,尝试画一个树形图,看看条件是先应用于单行,还是聚合后过滤。
这将为您节省大量调试时间。

查询各课程的平均成绩并按成绩降序排列

结论:SQL语句正确,可以直接使用。

短句: 1 . 使用AVG()计算平均分。
2 . 学生注明桌号名称,以免混淆。
3 、先有公司,再利用它进行传播。
4 . 每个学生至少选修5 门课程。

白话: 1 .和计算平均分一样,使用AVG函数。
2 . 学号必须位于学生姓名之前,以免混淆。
3 . 首先将学生分组,然后用他们选择5 门以上的课程。
4 . 每个学生必须至少算5 门课程。

专业用语:
AVG():添加平均值。

GROUP BY:一组字段。

having:耦合后过滤条件。

COUNT():计算天数。

具体项目、时间、数量:
项目:学生职业选择系统。

时间:2 02 3 年。

数量:5 个师。

住房:
我不确定,但我的经历是这样的。

评价一下自己。