Mysql中的Group by与Having

先看一下这个SQL

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;

 在标准SQL中,上面这句查询 是不合法的,因为该查询包含Group by子句,所以在select列表中的列只能是group by里面声明的列,或者是使用了聚集函数的列。而上面这句SQL中c.name不属于这两者

 

但是在Mysql中对Group by功能进行了扩展,使得在包含有group by子句的查询中也能select没有使用聚集函数的列,也就是说上面这句话在Mysql里面是合法的。可是,语句虽然合法,但是Mysql并不保证该列的正确性,Mysql只会从分组中随意的取出该列的值,也就是说在每一个分组中,未聚集的列的值如果都是相同的,那么这句话没有任何问题,否则就可能出错。

 

同理,对于Having子句也存在同样的问题。

标准SQL是不允许Having子句中引用未在group by子句中出现的列,除非该列是使用了聚集函数

Mysql对Having的扩展与其对Group by的扩展类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值