mysql怎么分组查询 mysql分组查询语句

mysql进阶5:分组查询

/*语法:

创新互联主要从事网站设计、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务湖南,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

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 分组查询top n(多种方法)

查询每门科目的前3名。

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

表所有数据为:

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

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

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

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

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

参考链接:

MySQL 怎样分组查询

MySQL GROUP BY 子句

GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

具体语法参考:

from 树懒学堂 - 一站式数据知识平台


标题名称:mysql怎么分组查询 mysql分组查询语句
本文路径:http://myzitong.com/article/hhdsss.html