zoukankan      html  css  js  c++  java
  • group by的使用

    在sql语句中经常用到group by,但是对其并不是太了解,所以记录下来:

    select A,cout(*) 数量 from table_name group by A;

    group by 的使用有一条原则,那就是select 后面的所有列中没有使用聚合函数到必须出现在group by 后面。

    那么group by 究竟有什么作用呢?下面是在网上找到的一片帖子,供自己参考:

    在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 

    SELECT SUM(population) FROM bbc


      这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。

       通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

      HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
    而 HAVING子句在聚合后对组记录进行筛选。

      让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。

    SQL实例:

      一、显示每个地区的总人口数和总面积:

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region


      先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

      二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region
    HAVING SUM(area)>1000000


      在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

      相反,HAVING子句可以让我们筛选成组后的各组数据.

    =================================================================================

    GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 

    你用了GROUP BY 按 ITEM.ITEMNUM 这个字段分组,那其他字段内容不同,变成一对多又改如何显示呢,比如下面所示 

    A B 
    1 abc 
    1 bcd 
    1 asdfg 

    select A,B from table group by A 
    你说这样查出来是什么结果, 

    A B 
         abc 
    1 bcd 
         asdfg 

    右边3条如何变成一条,所以需要用到聚合函数,比如 

    select A,count(B) 数量 from table group by A 
    这样的结果就是 
    A 数量 
    1 3 

    group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面 。

    转自dev.yesky.com/230/2669730.shtml

     

  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/wzheng/p/3836755.html
Copyright © 2011-2022 走看看