189 8069 5689

怎么查询mysql分组 mysql数据库分组查询语句

MySQL | 数据查询DQL语言:分组统计

▲ 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子句中的子查询

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 怎样分组查询

 mysql

oracle

中分组、聚合函数的区别!

今天需要这样一句

sql

:先用

group by

进行分组,然后利用聚合函数

count

或者

sum

进行计算,并显示

其它的辅助信息。

mysql

环境中,我模拟如下环境:

CREATE TABLE `room` (

`rid` varchar(5) default NULL,

`rname` varchar(5) default NULL,

`pid` int(11) default NULL,

`seq` int(11) NOT NULL auto_increment,

PRIMARY KEY

(`seq`)

) ENGINE=InnoDB DEFAULT

CHARSET=utf8

房间表,

seq

房间入住序号

(主键)

rname

为房间名,这里不考虑第三范式

情景:人住房间,

统计某个房间某个人住的次数

用户表,客人的信息

Mysql 分组查询top n(多种方法)

查询每门科目的前3名。

对于查询的结果,一般有两种情况。

表所有数据为:

情况1:对于分数相同的人,其后面的人 紧跟着名次排,直到排够名次3,就不再往后取了。

情况2:对于分数相同的人,若当前相同名次的人数大于或等于 3, 则相同分数其后面的人不再参于top3了。

在情况2中 ,为什么”李四 - java“ 这行没有了呢?

可以这样理解,在情况2中相当于使用了 名次空缺 , 分数相同的人其后面那个人,的名次为 前面的人数+1 , 这里的 ”李四-java“这行,他的名次应当是 5 , 所有top3自然取不到 ”李四-java“这行。

情况2和情况 写法都是对应的, 需要注意的是 并列名次,后面的人 是否需要保持名次空缺。那么统计的时候就需要根据情况去重。

参考链接:

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 后可以跟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)

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

【MySQL】分组查询(GROUP BY)

MySQL中使用 GROUP BY 对数据进行分组,GROUP BY从字面意义上理解就是根据'BY'指定的规则对数据进行分组, 所谓分组就是将一个'数据集'划分成若干个'子区域',然后针对若干个'小区域'进行数据处理 。基本语法形式为:

字段值为进行分组时所依据的列名称, “HAVING 条件表达式” 指定满足表达式限定条件的结果将被显示。

GROUP BY关键字通常和集合函数一起使用,例如:MAX()、MIN()、COUNT()、SUM()、AVG()。即把数据分为多个逻辑组,并对每个组进行集合计算。

WHERE 子句过滤行,在数据分组前过滤;HAVING 子句过滤分组,在数据分组后过滤。WHERE排除的行不包括在分组里,且HAVING支持所有WHERE操作符。

使用GROUP BY可以对多个字段进行分组,根据多字段的值来进行层次分组,分组从左到右。

注意事项:


分享文章:怎么查询mysql分组 mysql数据库分组查询语句
本文地址:http://cdxtjz.cn/article/hjchsd.html

其他资讯