group by having sql server

select * from dbo.student

select salary,AVG(grade)
from dbo.student
where salary >= 2000
group by salary
having salary <= 5000

having 【对分组之后的信息进行过滤】
1.having子句是用来对分组一家之言后的数据进行过滤因此使用having时通常都会先使用 group by

  1. 如果没使用 group by 但使用了having 则意味着 having 把所有的记录当作一组来进行过滤
    极少用
    select COUNT(*)
    from dbo.student
    having AVG(dbo.student) > 2000

  2. having 子句出现的字段必须的是分组之后的组的整体信息
    having 子句不允许出现组内的详细信息

  3. 尽管 select 字段可以出现别名
    但是having子句中不能出现字段的别名,只能使用字段最原始的名字
    原因不得而知
    5.having 和 where 的异同
    相同的:
    都是对数据过滤,只保留有效的数据
    不同:
    where 是对原始的记录过滤 having 是对分组之后的记录过滤
    where 必须的写在 having 的前面,顺序不可颠倒否则运行出错
    例子:
    select salary,AVG(grade),COUNT(*),MIN(),SUM()
    from dbo.student
    where salary >= 2000 --因为where是对原始的数据过滤 不能使用聚合函数 因为还没有分组
    group by salary
    having salary <= 5000 --对分组之后的记录过滤

    select salary,count(),grade
    from dbo.student
    where salary > 2000
    group by salary , grade
    having count(
    ) > 2000
    order by salary desc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾凡宇先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值