mysql-where切不可与having乱用!

来源:互联网 发布:剑三御姐捏脸数据下载 编辑:程序博客网 时间:2024/09/21 09:01

基础知识

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

错误实例

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

SELECT    `name`,    score,COUNT(*) as cntFROM    stuWHERE score<60HAVING cnt>=1

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

解决方法

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

解决方法:

SELECT    `name`,    score,COUNT(*) as cntFROM    stuWHERE score<60GROUP BY `name`HAVING cnt>=1

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

结论

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

0 0
原创粉丝点击