zoukankan      html  css  js  c++  java
  • mysql_分组group by和分组后的过滤having

    可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数。

    聚合函数:
      max 最大值
      min 最小值
      avg 平均值
      sum 求和
      count 总数
    # 查询每个post字段下id的记录个数。
    select post,count(id) as emp_count from employee group by post;

    # 查询每个post字段下的salary字段数据的平均值。
    select post,avg(salary) as emp_count from employee group by post;

     强调:

    如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义
    多条记录之间的某个字段值相同,该字段通常用来作为分组的依据

    如果没有group by,则整个表为一组,同意可以使用聚合函数。

    # 查询整个表中最高的salary的值。
    select max(salary) as emp_count from employee;

     group_concat函数:

    # 查询并列出每种post字段下面的name字段。
    select post,group_concat(name) as emp_count from employee group by post;

    having(过滤) 

    #!!!执行优先级从高到低:where > group by > having 
    #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
    
    #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
    # 查询以post字段分组后每个post字段下数量大于2的记录。
    select post,group_concat(name),count(id) from employee group by post having count(id) > 2;

    # 查询以post字段分组后,每个post字段下salary字段数据平均值大于10000的记录。
    select post,avg(salary) from employee group by post having avg(salary) > 10000;

  • 相关阅读:
    FFmpeg 协议初步学习
    HTML DOM(一):认识DOM
    ant 安装
    ubunut 查看port被哪个程序占用
    cacti气象图调整(批量位置调整、更改生成图大小等)
    内网port映射具体解释(花生壳)
    HDU 2647 Reward(图论-拓扑排序)
    白话经典算法系列之七 堆与堆排序
    Codeforces Round #191 (Div. 2)---A. Flipping Game
    Serverlet具体解释
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12260575.html
Copyright © 2011-2022 走看看