where和group by能一起使用吗?

答案是可以。
我们在书写sql语句的时候关键字的顺序是

SELECT ...
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ...

然而在今天学习的时候有一个需求是:显示出emp表中平均工资大于2000的部门编号与平均工资
第一次编写的sql是

SELECT e.department_id ,AVG(e.salary) 
FROM employees e 
WHERE AVG(e.salary) > 2000
GROUP BY e.department_id;

这条sql看起来似乎没有什么问题,但是运行后报了一个错误:
SQL 错误 [1]: [SQLITE_ERROR] SQL error or missing database (misuse of aggregate: AVG())
misuse of aggregate:翻译为泛滥使用

那么就很明了了,是AVG函数用的方式不对,查了一下资料后得出结论:
在where中使用聚合函数,是不被允许的。

但是从需求出发想要得到平均工资大于2000的结果就必须使用AVG()函数,
这是就想到了在分组之后使用条件查询,即在group by之后使用having
这时sql就应该写成

SELECT e.department_id ,AVG(e.salary) 
FROM employees e 
GROUP BY e.department_id;
HAVING AVG(e.salary) > 2000;

这时候就能查找出我们想要的结果:
在这里插入图片描述
进行到这里我又多想了一下,我不对结果进行分组,是否能在where中使用聚合函数呢??
代码如下;

SELECT e.department_id ,AVG(e.salary) 
FROM employees e 
WHERE  AVG(e.salary) > 2000;

运行时仍然报同样的错误:
在这里插入图片描述
这样就重新验证了上面的结论:where字句中不能聚合函数

从以上案例我们得到的结论是:
where能和group by组合使用,但是在where字句中不能使用聚合函数,如果涉及到分组和子查询中使用聚合函数的情况,可以先用group by分组,在使用having进行子查询的方式解决。

– 补充 2022010.28
今天在看书的时候看到了一个有趣的问题:
having可以用在group by前面?
我们知道having要和group by配合使用,而且通常情况下是把having用在group by后面,但是今天看到一个问题是having可以用在group by前面,抱着怀疑的态度去试验了一下发现还真是可以。
很有意思,分享给大家~

在这里插入图片描述
在这里插入图片描述

而且having在group by前和在后使用的两种情况下的结果是一致的。
在这里插入图片描述
在这里插入图片描述

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值