mysql怎么分组查询 mysql分组函数使用

mysql进阶5:分组查询/*语法:
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(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作 , 比固定值的方式效率稍微低一些 。
Mysql语法之分组数据 如何分组数据,以便能汇总表内容的子集 。这涉及两个新SELECT语句子句,分别是GROUP BY子句和HAVING子句 。
分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算 。
分组是在SELECT语句的GROUP BY 子句中建立的 。
来看例子理解:
mysqlselect vend_id,COUNT(*)AS num_prods from productsgroup byvend_id;
也就是不同的Id的商品总数都能分别查出来 。
除了能用GROUP BY分组数据外,Mysql还允许过滤分组,规定包括哪些分组,排除哪些分组 。
也就是HAVING子句 。
mysqlselect cust_id,COUNT(/) AS orders from orders uGROUP BY/u cust_id uHAVING/u COUNT(/) =2;
注意:这里HAVING换成WHERE是不管用的 。HAVING针对于分组 。
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤 。
那么咱么看看怎么混合WHERE和HAVING 。
mysqlselect vend_id, COUNT( /) AS num_prods from products uwhere prod_price=10 group by/u vend_id HAVING COUNT(/) =2;
mysqlselect order_num,SUM(quantity*item_price) ASordertotal
from orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) =50
order by ordertotal;
MySQL分组、排序 上一篇聚合函数末尾处使用了GROUP BY,但没有做具体的介绍,这一篇就主要介绍一下GROUP BY的使用方法 。顺便介绍一下对分组查询的过滤关键词HAVING的用法 。
在MySQL中,GROUP BY关键词可以根据一个或多个字段对查询结果进行分组,类似于Excel中的数据透视表 。可以单独使用,但一般情况下都是结合聚合函数来使用的 。
语法格式如下:
下面演示都是基于这一张简单的省份对应大区的表格 。
【单独使用GROUP BY】
单独使用GROUP BY关键字时,查询结果会只显示每个分组的第一条记录 。
根据省份表里面的大区进行聚合,查询全国共分成了几个大区,SQL语句如下↓
【GROUP BY结合聚合函数】
5个聚合函数上一篇已经详细介绍了用法,GROUP BY和聚合函数结合使用也是最频繁的 , 下面就继续使用省份表来求每个大区有多少个省份,对应的聚合函数就是COUNT函数,SQL语句如下↓
【GROUP BY结合GROUP_CONCAT】
这还是一个很有用的功能,GROUP_CONCAT() 函数会把每个分组的字段值都合并成一行显示出来 。
下面继续使用省份表,把每个大区对应的省份放在一行展示 , 用分号分开,SQL语句如下↓
【GROUP BY结合WITH ROLLUP】
WITH POLLUP关键词用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,SQL语句如下↓
【GROUP BY结合HAVING】
在MySQL中,可以使用HAVING关键字对分组后的数据进行过滤 。
使用 HAVING 关键字的语法格式如下:
HAVING关键词和WHERE关键词都可以用来过滤数据,且HAVING支持WHERE关键词中所有的操作符和语法 。但是WHERE和HAVING关键字也存在以下几点差异:
下面筛选一下省份数量在7个及以上的大区,SQL语句如下↓
【GROUP BY结合ORDER BY】
聚合后的数据,一半情况下也是需要进行排序的,通过ORDER BY对聚合查询结果进行排序,对省份数量按从大到小进行排序,SQL语句如下↓
End
◆ PowerBI开场白
◆ Python高德地图可视化
◆ Python不规则条形图
Mysql 分组查询group by与with rollup当用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 后可以跟withrollup,表示在进行分组统计的基础上再次进行汇总统计(在每个分组下都会有统计汇总):
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)
————————————————
MySQL 怎样分组查询MySQL GROUP BY 子句
GROUP BY 语句根据一个或多个列对结果集进行分组 。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数 。
具体语法参考:
from 树懒学堂 - 一站式数据知识平台
【mysql怎么分组查询 mysql分组函数使用】关于mysql怎么分组查询和mysql分组函数使用的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读