group by 与 having

  • 分组:将表格中的数据按照某一列进行分组,通常会搭配聚合函数使用,常见的聚合函数有如下几种
    • sum
    • avg
    • count
    • min max
  • eg
    • 存在一个表格,结构如下

    • 将订单按照customerid进行分组,并且算出每一个客户对应的订单总价

        select i.customerid, sum(price) 
        from items_ordered i
        group by i.customerid
        having sum(price) > 100;
      
    • tips:

      • 假设存在另外一个表:存放customerid以及相应的客户信息.当你想要联合查询时,一般是先join之后再进行group by的操作

      • having是在分组之后上面进行的操作,而where的操作是在原来的每一条记录上面进行操作.

          select i.customerid, avg(price) from items_ordered i
          where i.price > 10
          and i.price < 100
          group by i.customerid
          having sum(price) > 100;
        
      • 这个查询语句的意思是:在表中先找出price在10和100之间的项,将其按照customerid进行分组,在每个分组中找出总价值大于100的分组,打印出其customerid以及平均价值.