mysql-where切不可与having乱用!

基础知识

  1. 元组
    在关系演算中一组域的笛卡尔积中的每一个元素叫做元组.如(李华,计算机专业,2006);这中间的李华、计算机专业、2006都是没有属性和取值范围的。而记录中的是有属性、取值范围等约束的。可以这样说:记录是特殊的元组。
  2. 聚合函数
    SQL基本函数,聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。

错误实例

数据表结构:stu(name,score,id)
目的:得到分数少于60分学,并超过2个以上的各组数据

SELECT
    `name`,
    score,COUNT(*) as cnt
FROM
    stu
WHERE score<60
HAVING cnt>=1

最后得到的结果只有一行数据 结果图片

解决方法

首先HAVING是聚合函数,在操作之前应该将元组进行分组,才可以得到每个不同的结果,WHERE函数只是操作表单元组数据,最后聚合得到结果只是一个元组数据,返回第一个数据,所以得到以上结果。

解决方法:

SELECT
    `name`,
    score,COUNT(*) as cnt
FROM
    stu
WHERE score<60
GROUP BY `name`
HAVING cnt>=1

所以为了,进行分组,需要通过name进行分组聚合,然后使用having聚合函数,得到结果。
结果

结论

在操作聚合函数之前需要将元组数据进行分组,然后再进行聚合,得出所要的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值