赛捷软件论坛's Archiver

erina.pan 发表于 2017-9-8 10:34

SQL必知必会(分组数据)

10.1 数据分组

从上一课得知,使用SQL的聚集函数可以汇总数据,这样,我们就能对行进行计数,计算和取平均数,不检索所有数据就能取最值。目前为止所有的计算都是在表的所有数据或者匹配特定的WHERE子句的数据上进行的。本课则说明使用分组,对每个组聚集计算。

10.2 创建分组

分组是使用SELECT语句的GROUP BY子句创建的,下例:[code]mysql> SELECT vend_id,COUNT(*) AS num_prods
    -> FROM Products
    -> GROUP BY vend_id;
+---------+-----------+
| vend_id | num_prods |
+---------+-----------+
| BRS01   |         3 |
| DLL01   |         4 |
| FNG01   |         2 |
+---------+-----------+
3 rows in set (0.03 sec)[/code]在使用GROUP BY之前,需要知道一些重要的规定:

GROUP BY子句可以包含任意数目的列,因而可以对分组进行嵌套,进而更细致分组。 如果在GROUP BY中嵌套了分组,数据将在最后指定的分组上进行汇总,换句话说,在建立分组时,指定的所有列都一起计算。
嵌套分组,可以看下列示例:[code]mysql> SELECT COUNT(*),prod_id,order_num FROM orderitems GROUP BY prod_id;
+----------+---------+-----------+
| COUNT(*) | prod_id | order_num |
+----------+---------+-----------+
|        3 | BNBG01  |     20007 |
|        3 | BNBG02  |     20007 |
|        3 | BNBG03  |     20007 |
|        2 | BR01    |     20005 |
|        1 | BR02    |     20006 |
|        4 | BR03    |     20005 |
|        2 | RGAN01  |     20007 |
+----------+---------+-----------+
7 rows in set (0.00 sec)

mysql> SELECT COUNT(*),prod_id,order_num FROM orderitems GROUP BY order_num,prod_id;
+----------+---------+-----------+
| COUNT(*) | prod_id | order_num |
+----------+---------+-----------+
|        1 | BR01    |     20005 |
|        1 | BR03    |     20005 |
|        1 | BR01    |     20006 |
|        1 | BR02    |     20006 |
|        1 | BR03    |     20006 |
|        1 | BNBG01  |     20007 |
|        1 | BNBG02  |     20007 |
|        1 | BNBG03  |     20007 |
|        1 | BR03    |     20007 |
|        1 | RGAN01  |     20007 |
|        1 | BNBG01  |     20008 |
|        1 | BNBG02  |     20008 |
|        1 | BNBG03  |     20008 |
|        1 | BR03    |     20008 |
|        1 | RGAN01  |     20008 |
|        1 | BNBG01  |     20009 |
|        1 | BNBG02  |     20009 |
|        1 | BNBG03  |     20009 |
+----------+---------+-----------+
18 rows in set (0.00 sec)
[/code]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.