现在的位置: 首页 > 综合 > 正文

group by 和Having

2013年10月23日 ⁄ 综合 ⁄ 共 1714字 ⁄ 字号 评论关闭
文章目录

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 后面。

 

 

1.   GROUP后面可以跟多列。
group by 姓名,班级
首先按姓名排序,当姓名相同的时候才按班级排序,比如:

姓名 班级
A     1
B     9
C     11
D     1
D     2
D     3
E     2

注意D的班级顺序和整个姓名排序的方式。 

 

 

 

2.   举个例子:

记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出。第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算。这个语法为:   

SELECT "栏位1", SUM("栏位2") FROM "表格名" GROUP BY "栏位1" 
SELECT store_name, SUM(Sales)  FROM Store_Information GROUP BY store_name

在我们的示范上,   

Store_Information 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

我们就打入, SELECT store_name, SUM(Sales)  FROM Store_Information GROUP BY store_name   

结果:   

store_name SUM(Sales)
Los Angeles $1800
San Diego $250
Boston $700

当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就需要用到 GROUP BY 这个指令。在这个情况下,我们需要确定我们有 GROUP BY 所有其他的栏位。换句话说,除了有包括函数的栏位外,我 们都需要将其放在 GROUP BY 的子句中。

 

 

 

Having
用途:

HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

SQL HAVING 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name 

HAVING aggregate_function(column_name) operator value指定群组或汇总的搜寻条件。
语法:
SELECT column,SUM(column) FROM table GROUP BY column HAVING SUM(column) condition value
解释:
HAVING 通常与 GROUP BY 子句同时使用。不使用 GROUP BY 时, HAVING 则与 WHERE 子句功能相似。

例:
“Sales” 表中的原始数据 :

 

Company            Amount

W3Schools             5500

IBM                      4500

W3Schools          7100

 

按照 Company 字段进行分组,求出每个 Company 的 Amout 的合计在 10000 以上的数据:

SELECT Company,SUM(Amount) FROM Sales GROUP BY Company HAVING SUM(Amount)>10000

返回结果 :

 

Company      SUM(Amount)

 W3Schools   12600

抱歉!评论已关闭.