mysql进阶5:分组查询

mysql进阶5:分组查询,第1张

/*语法:

select 分组函数 列(要求出现在group by的后面)

from 表

【where 筛选条件】

group by 分组的列表

[order by 子句]

注意:查询列表必须特殊,要求是分组函数和group by 后出现的字段

特点:

1.分组查询中筛选条件分为两类:

数据源 位置 关键字

分组前筛选 原始表 group by子句的前面 where

分组后筛选 分组后的结果集 group by子句的后面 having

1.分组函数做条件肯定是放在having子句中

2.能用分组前筛选的,优先考虑使用分组前筛选

2.group by 子句支持单个字段、多个字段分组(用逗号隔开没有顺序要求)表达式或函数(用的较少)

3.也可以添加排序(放在整个group by子句之后)

*/

count(1),其实就是计算一共有多少符合条件的行。

1并不是表示第一个字段,而是表示一个固定值。

其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.

同理,count(2),也可以,得到的值完全一样,count('x'),count('y')都是可以的。一样的理解方式。在你这个语句理都可以使用,返回的值完全是一样的。就是计数。

count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。

▲ count(*)

统计查询结果集返回的行数.

▲ count(ve)

统计值表达式返回的非空值的个数.

▲ count(distinct ve)

统计值表达式返回的非空不同值的个数.

▲ sum(ve)

统计值表达式返回的非空值的和.

▲ sum(distinct ve)

统计值表达式返回的非空不同值的和.

▲ avg(ve)

统计值表达式返回的非空值的平均值.

▲ avg(distinct ve)

统计值表达式返回的非空不同值的平均值.

▲ max(ve)

统计值表达式返回的非空值的最大值.

▲ min(ve)

统计值表达式返回的非空值的最小值.

由group by子句来实现的.

语法:

(1)分组的引入

(2)分组定义

指定某列或某些列作为划分的依据,比较这些列值是否相同,具有相同列值的行放在同一组,这样就可以将最初的结果集划分为若干个子集,每个子集称为一个分组.

一般来说有多少个不同的列值就可以分为多少组.

语法:

指定某列或计算列作为统计的对象,将统计函数作用在该对象上,统计函数按照分组自动对每一分组的列值进行统计,每一分组返回一个统计后的结果.

(1)MYSQL对GROUP BY的非ANSI标准扩展

是由having子句来实现的.

语法:

(1)having子句中的子查询

当用select*from 表名 group by ‘字段名1’ 将选出来的内容将按照字段1分组,其他列不尽相同,会以最前面的内容显示:

GROUP BY 后面可以跟多个列名,表示以多列作为分组依据:

mysql>select `name`,`date`,count(*) from `employee_tbl` group by `name`,date

+------+---------------------+----------+

| name | date                | count(*) |

+------+---------------------+----------+

| 小丽 | 2016-04-19 15:26:02 |        1 |

| 小明 | 2016-04-04 15:26:54 |        1 |

| 小明 | 2016-04-11 15:26:40 |        1 |

| 小明 | 2016-04-22 15:25:33 |        1 |

| 小王 | 2016-04-07 15:26:14 |        1 |

| 小王 | 2016-04-20 15:25:47 |        1 |

+------+---------------------+----------+

6 rows in set (0.05 sec)

group by 后可以跟with  rollup,表示在进行分组统计的基础上再次进行汇总统计(在每个分组下都会有统计汇总):

mysql>select*from r

+------+-----+------+

| name | cat | fish |

+------+-----+------+

| 小明 | x  | 1    |

| 小明 | x  | 2    |

| 小明 | x  | 4    |

| 小明 | y  | 2    |

| 小明 | y  | 2    |

| 小明 | z  | 1    |

| 小红 | x  | 1    |

| 小红 | x  | 3    |

| 小红 | y  | 1    |

| 小红 | y  | 2    |

| 小青 | y  | 3    |

| 小青 | z  | 2    |

| 小青 | z  | 1    |

+------+-----+------+

13 rows in set (0.05 sec)

mysql>select name,cat,fish,count(*) from r group by name with rollup

+------+-----+------+----------+

| name | cat | fish | count(*) |

+------+-----+------+----------+

| 小红 | x  | 1    |        4 |

| 小明 | x  | 1    |        6 |

| 小青 | y  | 3    |        3 |

| NULL | y  | 3    |      13 |

+------+-----+------+----------+

4 rows in set (0.05 sec)

mysql>select name,cat,fish,count(*) from r group by name,cat with rollup

+------+------+------+----------+

| name | cat  | fish | count(*) |

+------+------+------+----------+

| 小红 | x    | 1    |        2 |

| 小红 | y    | 1    |        2 |

| 小红 | NULL | 1    |        4 |

| 小明 | x    | 1    |        3 |

| 小明 | y    | 2    |        2 |

| 小明 | z    | 1    |        1 |

| 小明 | NULL | 1    |        6 |

| 小青 | y    | 3    |        1 |

| 小青 | z    | 2    |        2 |

| 小青 | NULL | 2    |        3 |

| NULL | NULL | 2    |      13 |

+------+------+------+----------+

11 rows in set (0.06 sec)

mysql>select name,cat,fish,count(*) from r group by name,cat,fish with rollup

+------+------+------+----------+

| name | cat  | fish | count(*) |

+------+------+------+----------+

| 小红 | x    | 1    |        1 |

| 小红 | x    | 3    |        1 |

| 小红 | x    | NULL |        2 |

| 小红 | y    | 1    |        1 |

| 小红 | y    | 2    |        1 |

| 小红 | y    | NULL |        2 |

| 小红 | NULL | NULL |        4 |

| 小明 | x    | 1    |        1 |

| 小明 | x    | 2    |        1 |

| 小明 | x    | 4    |        1 |

| 小明 | x    | NULL |        3 |

| 小明 | y    | 2    |        2 |

| 小明 | y    | NULL |        2 |

| 小明 | z    | 1    |        1 |

| 小明 | z    | NULL |        1 |

| 小明 | NULL | NULL |        6 |

| 小青 | y    | 3    |        1 |

| 小青 | y    | NULL |        1 |

| 小青 | z    | 1    |        1 |

| 小青 | z    | 2    |        1 |

| 小青 | z    | NULL |        2 |

| 小青 | NULL | NULL |        3 |

| NULL | NULL | NULL |      13 |

+------+------+------+----------+

23 rows in set (0.07 sec)

mysql>select name,cat,fish,sum(fish) from r group by name with rollup

+------+-----+------+-----------+

| name | cat | fish | sum(fish) |

+------+-----+------+-----------+

| 小红 | x  | 1    |        7 |

| 小明 | x  | 1    |        12 |

| 小青 | y  | 3    |        6 |

| NULL | y  | 3    |        25 |

+------+-----+------+-----------+

4 rows in set (0.05 sec)

mysql>select name,cat,fish,sum(fish) from r group by name,cat with rollup

+------+------+------+-----------+

| name | cat  | fish | sum(fish) |

+------+------+------+-----------+

| 小红 | x    | 1    |        4 |

| 小红 | y    | 1    |        3 |

| 小红 | NULL | 1    |        7 |

| 小明 | x    | 1    |        7 |

| 小明 | y    | 2    |        4 |

| 小明 | z    | 1    |        1 |

| 小明 | NULL | 1    |        12 |

| 小青 | y    | 3    |        3 |

| 小青 | z    | 2    |        3 |

| 小青 | NULL | 2    |        6 |

| NULL | NULL | 2    |        25 |

+------+------+------+-----------+

11 rows in set (0.06 sec)

mysql>select name,cat,fish,sum(fish) from r group by name,cat,fish with rollup

+------+------+------+-----------+

| name | cat  | fish | sum(fish) |

+------+------+------+-----------+

| 小红 | x    | 1    |        1 |

| 小红 | x    | 3    |        3 |

| 小红 | x    | NULL |        4 |

| 小红 | y    | 1    |        1 |

| 小红 | y    | 2    |        2 |

| 小红 | y    | NULL |        3 |

| 小红 | NULL | NULL |        7 |

| 小明 | x    | 1    |        1 |

| 小明 | x    | 2    |        2 |

| 小明 | x    | 4    |        4 |

| 小明 | x    | NULL |        7 |

| 小明 | y    | 2    |        4 |

| 小明 | y    | NULL |        4 |

| 小明 | z    | 1    |        1 |

| 小明 | z    | NULL |        1 |

| 小明 | NULL | NULL |        12 |

| 小青 | y    | 3    |        3 |

| 小青 | y    | NULL |        3 |

| 小青 | z    | 1    |        1 |

| 小青 | z    | 2    |        2 |

| 小青 | z    | NULL |        3 |

| 小青 | NULL | NULL |        6 |

| NULL | NULL | NULL |        25 |

+------+------+------+-----------+

23 rows in set (0.07 sec)

————————————————


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8728788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存