mysql 分组语法_数据库如何把数据分组_MySQL分组语法详解 - 树懒学堂

在本文中,树懒君将介绍MySQL是怎样进行数据分组的,分组的目的在于将表内容的子集进行汇总。这涉及到了2个SELECT子句,分别是GROUP BY和HAVING;分组能够将一个整表分为不同的逻辑组,来对每个逻辑组进行聚合操作。

一、什么是MySQL分组?

在MySQL查询语句中,可以利用GROUP BY子句,将結果集中的数据行依据选定的列的值进行逻辑分组,然后将表中数据的子集进行汇总,以此来实现对逻辑组而不是整张表的整合。

加下来树懒君来介绍一下分组查询的语法:

二、MySQL分组语法(GROUP BY)

GROUP BY { | | } [ASC | DESC] }

具体说明如下:

:选定用以分组的列。能够选定不同的多个列,彼此之间用逗号隔开。

:指明分组的关系式。一般与聚合函数一起应用,比如可将关系式COUNT(*) AS ‘总数’做为查询列表目录的一项。

:选定分组的列在查询結果集的位置,一般是一个正整数。比如,GROUPBY 2表明根据查询明细上的第2列的值开展逻辑分组。

ASC|DESC:关键词ASC表明按升序分组,关键词DESC表明按降序分组,

示例:

mysql> set names utf8;

mysql> SELECT * FROM employee_tbl;

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

| id | name | date | singin |

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

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

| 2 | 小王 | 2016-04-20 15:25:47 | 3 |

| 3 | 小丽 | 2016-04-19 15:26:02 | 2 |

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

| 5 | 小明 | 2016-04-11 15:26:40 | 4 |

| 6 | 小明 | 2016-04-04 15:26:54 | 2 |

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

6 rows in set (0.00 sec)

这里树懒君通过GROUP BY语句将数据表按姓名开展分组,并统计每一个人有多少条纪录:

mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;

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

| name | COUNT(*) |

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

| 小丽 | 1 |

| 小明 | 3 |

| 小王 | 2 |

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

3 rows in set (0.01 sec)

对于GROUP BY子句的使用,必须注意以下几个方面:

GROUP BY子句能够包括随意数量的列,使其能够对分组开展嵌套,对数据分组进行更为细腻的控制。

GROUP BY子句列举的每一个列都必须是检索列或有效表达式,但不可以是聚合函数。

三、过虑分组(HAVING)

MySQL容许过虑分组,用户可以指定结果集包含什么分组,清除什么分组。过虑分组选用HAVING子句来实现。

在SQL中加入HAVING子句的原因在于,WHERE关键字没法与聚合函数一起使用。HAVING子句能够帮助我们筛选分组后的每组数据。

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;

下面树懒君给大家介绍一下where和having的不同:

where在分组之前进行限制,如果不符合条件,则不进行分组;

having是在分组之后进行限制,假如不符合条件,则不会被查询到结果集;

where后边不能跟聚合函数,而having可以通过聚合函数进行判断。

四、MySQL分组的注意点:

在单表分组查寻中,所有不是分组函数的查询字段都要出现在group by子句之后,顺序不影响查询结果。

通常情况下,分组前的数据筛选时放到where子句中,分组后的数据筛选时放到having子句中,但分组后筛选数据的条件是表的字段时,可以放到where子句中(且这时高效率高些)。

where中不可以使用分组函数,因而有这么一个技巧:只要筛选条件时表中字段就放到where子句中,不然放到having子句中。

orderby子句、groupby子句和having子句都适用别称。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值