mysql分组与排序一起_mysql-分组,排序,limit同时出现的问题

mysql的语句同时出现group by,order by,limit时,所请求的数据往往不是自己所需要的

以下面的课程表为例,需要获取不同标签下的一门课程,并根据浏览量降序排列,取前四条。

其中label:分组,click:排序

CREATE TABLE `course` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL COMMENT '课程名称',

`label` varchar(255) DEFAULT NULL COMMENT '课程标签',

`click` int(11) DEFAULT NULL COMMENT '浏览量',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='课程/文章表';

添加数据如下:

image.png

通常写法:

image.png

错误:

排名第一的点击100次的:2019语文-作文 没有了,跟想要的数据不一样

错误分析:

1.sql的语句执行顺序是一个从前往后的过程,可以理解成后面的语句作用于前面语句生成的临时数据表

2.group by与order by的作用字段不同时,排序是在分组后的数据的基础上进行的,此时的数据或许已不是你想要的数据了

3.mysql没法先排序后分组,语法不允许

先说结论:

暂未找到能一条语句解决该问题的sql写法 (希望能做到的朋友可以留言一起学习下)

急于完成工作任务的,跳过该问题,采用下面解决方案

解决方式:

1.根据where条件,order by 排序,数据库查询limit条(可多于limit条)数据

2.让程序来做分组筛选

3.程序做分组的同时,判断是否达到limit的数量需求

4.达到limit条数的,结束程序分组筛选

4.小于limit条数的,修改where条件,再次从步骤1开始

你可能感兴趣的:(mysql分组与排序一起)