数据库SQL语句中 group by 与 having 和 where 的用法

1、数据分组(GROUP BY):
SQL中数据可以按列名分组,搭配聚合函数十分实用。

例如有这样一个表:

统计每个班上20岁以上的学生人数:

SELECT student_class,COUNT(student_name) AS 总人数 FROM t_student WHERE student_age >20 GROUP BY (student_class);

我们再来看一个例子:

name   kecheng   fenshu
张三    语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90
 

         
(1)首先是where 和 group by 搭配:
         用一条SQL语句 查询课程成绩大于90分的学生姓名
         通常我们会这么写: 
               select name from table where  fenshu > 90
         而实际上我们还可以使用group by进行分组:
               select name from table where fenshu>90 group by kecheng
         当然这里分组好像没有什么实际作用,例子没举好,但这不是重点,
          重点是,使用where和group分组时:顺序应该为 where过滤 -> group by分组 -> min(聚合函数,如果有的话)
          因为这种搭配描述的是: 用where来实现满足过滤条件再聚合。

       
(2)再来看 having 和 group by 搭配:
         用一条SQL 语句 查询出每门课都大于80 分的学生姓名
                select name from table group by name having min(fenshu)>80
注意: 这里不能使用where,因为使用where顺序应该为 where过滤 -> group by分组 -> min(聚合函数)
                即 select name from table where min(fenshu)>80 group by name 这显然是不对的。
  
           而使用having,则顺序为  group by分组 -> having过滤 -> min(聚合函数)
           这样就达到聚合之后实现过滤的效果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值