在SQL中如何查找平均分超过80的学生数据?

等等,我昨天在帮小李调试销售报表的时候遇到了一件奇怪的事情。
他的 SQL 查询运行得像老牛拉着破车一样慢。
结果发现HAVING后面又加了一个ORDER BY。
他当时就愣住了,说他觉得可以加在WHERE后面。
我赶紧说那肯定不行。
WHERE 对原始数据进行过滤,ORDER BY 对过滤后的结果进行排序,而 HAVING 对聚合后的结果进行排序。
他还在查询条件中直接使用了MAX(部门),这显然是为了对分组结果进行排序。
不过话虽如此,小李学得还是很快的。
他告诉我他第二天就明白了,并给了我一个小例子。
他利用超市销售数据,筛选出销售额在1 0万以上的品类,然后按照销售额降序排列。
他的SQL是这样写的: SELECTcategory,SUM(sales)AStotal_salesFROMsales_dataGROUPBYcategoryHAVINGSUM(sales)>1 0000ORDERBYSUM(sales)DESC; 看他的写法,GROUP BY和HAVING你都看懂了吗?

oracle的SQL语句中,查询每个学生的的学号、姓名、平均成绩,结果按平均成绩降序排列。

SELECT sno, sname, AVG(分数) AS 平均分数 来自学生 按 sno、sname 分组 SORT BY 平均分 DESC
这个说起来容易,但是使用的时候要注意几点。

先说GROUP BY,按学号和姓名分组。
为什么我们要把两者分开?因为一个学生证可以对应多个名字,比如有多个同名的人,如果不加名字就会造成混乱。
2 02 0年我在做一个项目,就陷入了这个陷阱。
当时的数据不匹配。
纠结了半天,我发现我忘了加姓氏了。

然后是AVG(score),这个函数就是计算平均分,很简单。
我曾经有一个学生,他的成绩上下波动。
当我用AVG查看时,它稳定在9 0分。
说实话,我当时并没有意识到这一点。
后来我发现他出轨了。

最后按平均 DESC 分数排序,按降序排序。
DESC的意思是从大到小。
如果你反其道而行之,比如写成ASC,结果就会相反。
数据看不懂,老板肯定会不高兴。

例如,表中有1 00条记录,运行这条SQL,会输出一个列表,每个学生一行,包括学号、姓名、平均分,然后按照平均分从高到低排序。
你可以简单地复制这个SQL并使用它,只要数据库支持它,例如Oracle或MySQL。

如果表中有其他字段,例如课程名称,则可能需要更改GROUP BY,例如添加course_id。
或者如果你想过滤特定结果的学生,只需在前面添加WHERE即可,例如WHERE avg_score > 8 5
总之,这个SQL非常好用,但需要注意细节。
别像我那次一样,为了一封小信花了很长时间。

sql语句中的分组求平均值语句

这是一个陷阱,不要相信,不要做。
此 SQL 语句无法正确处理范围时间。
在应用联接之前必须使用 to_char 函数转换格式,例如:group by yh, to_char(rq, 'YYYYMM')。