mysql having 作用是什么?

mysql having 作用是什么?,第1张

HAVING用户在使用SQL语言的过程中可能希望解决的一个问题就是对由sum或其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句。语法格式为:

SELECT "column_name1", SUM("column_name2")

FROM "table_name"

GROUP BY "column_name1"

HAVING (arithematic function condition)

(GROUP BY从句可选)

由此,我们可以使用如下命令实现上述查询目的:

SELECT store_name, SUM(sales)

FROM Store_Information

GROUP BY store_name

HAVING SUM(sales) >1500

查询结果显示为:

store_name SUM(Sales)

Los Angeles $1800

小注:

SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处

having 和where 都是用来筛选用的

having 是筛选组 而where是筛选记录

他们有各自的区别

1》当分组筛选的时候 用having

2》其它情况用where

-----------------------------------------------------

用having就一定要和group by连用,

用group by不一有having (它只是一个筛选条件用的)

-------------------------------------------------------

例子

表结构

部门编号 姓名 工资

1 aa 2000

2 bb 1200

1 cc 2100

2 dd 1800

1 ee 2100

3 ff 8000

2 gg 2200

3 hh 4500

查询有多个员工的工资不低于2000的部门编号

(就是说如果一个部门的员工大于2000的人数有两个或两个以上就查询出来)

select 部门编号,count(*) from 员工信息表

where 工资>=2000

group by 部门编号

having count(*)>1

where 针对每一条记录筛选

而 having 对同一个部门的分组

count(*)>1 计算多于两个的部门

1、where和having都可以使用的场景

select goods_price,goods_name from sw_goods where goods_price > 100

select goods_price,goods_name from sw_goods having goods_price > 100

解释:上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情况下和where的效果是等效的,但是如果我没有select goods_price 就会报错!!因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。

2、只可以用where,不可以用having的情况

select goods_name,goods_number from sw_goods where goods_price > 100

select goods_name,goods_number from sw_goods having goods_price > 100 //报错!!!因为前面并没有筛选出goods_price 字段

3、只可以用having,不可以用where情况

查询每种goods_category_id商品的价格平均值,获取平均价格大于1000元的商品信息

select goods_category_id , avg(goods_price) as ag from sw_goods group by goods_category having ag > 10001

select goods_category_id , avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category //报错!!因为from sw_goods 这张数据表里面没有ag这个字段

注意:where 后面要跟的是数据表里的字段,如果我把ag换成avg(goods_price)也是错误的!因为表里没有该字段。而having只是根据前面查询出来的是什么就可以后面接什么。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6145187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存