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语句将数据表按姓名开展分组,并统计每⼀个⼈有多少条纪录:groupby是什么函数
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⼦句都适⽤别称。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论