查询工资级别的个数>20的个数,并且按工贷级别降序

SELECT COUNT(*), grade_level
FROM employees e
JOIN job_grades g ON e.salary BETWEEN g.lowest_sal AND g.highest_sal
GROUP BY grade_level
HAVING COUNT(*) > 20
ORDER BY grade_level DESC;

为什么需要GROUP BY而不是仅仅ORDER BY?
聚合数据:GROUP BY用于将结果集中的行分组,每组共享相同的grade_level值。在每组内,你可以使用聚合函数(如COUNT(*))来计算该组内的行数。没有GROUP BY,你将无法按grade_level进行分组并计算每个级别的员工数量。
筛选分组:HAVING子句用于过滤分组后的结果。在这个例子中,HAVING COUNT(*) > 20确保只有那些员工数量大于20的grade_level组被包含在最终的结果中。HAVING子句在GROUP BY之后执行,用于过滤聚合后的结果。
排序结果:ORDER BY用于对最终的结果集进行排序。在这个例子中,它根据grade_level的值以降序方式排序结果。但请注意,ORDER BY不能在没有GROUP BY的情况下直接应用于聚合函数的结果,因为那样会导致SQL语句的语法错误或逻辑错误。

  1. select语句中出现的列必须出现在group by语句中,而其他语句中的列可与select不一致??

  2. where分组前过滤,having分组后过滤,故having是对分组的值即聚集函数进行过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值