我是靠谱客的博主 平淡百合,最近开发中收集的这篇文章主要介绍mysql分组 limit_mysql的分组排序limit问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

作者:matrix

被围观: 6,877 次

发布时间:2018-05-03

分类:零零星星 |

一条评论 »

????NOTICE:这是一个创建于 991 天前的主题,其中的信息可能已经有所发展或是发生改变。

业务要求按照type,city分组,然后各取前面的100条数据输出,网上找到了类似的需求直接sql语句就可以解决。

测试表结构

CREATE TABLE `esc_catch` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`city` varchar(20) NOT NULL DEFAULT '' COMMENT '城市',

`price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '报价',

`type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1,2',

`add_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB   DEFAULT CHARSET=utf8mb4

解决办法

set @row=0;set @city=''; set @type='';

select a.city,a.price,a.type ,from_unixtime(a.add_time,'%Y-%m-%d %H:%i:%s') as add_time from esc_catch as a

inner join (

SELECT id,add_time, case when (@city = city and @type= type) then @row:=@row+1 else @row:=1 end as rownum, @city:=city as city , @type:=type as type FROM esc_catch order by type,city,add_time desc

) as b on b.id = a.id

where b.rownum>=100 order by b.type,b.city ;

说明:

头部事先声明变量

row 用于统计指定分组下出现的次数,

city和type是分组条件

核心在于inner join的的临时表操作,其中使用变量操作追加rownum字段

如果变量city,type值等同于临时表的同名字段则该行数据排序下标row++,否则为1

@city:=city as city , @type:=type as type 表示给每行数据的字段值赋给变量

之后在inner join内联表 之后使用自定义的rownum字段b.rownum<=100进行数量条件的限制即可,最后order by 操作便于查看数据

参考:

https://blog.csdn.net/ylqmf/article/details/39005949

https://blog.csdn.net/woshihaiyong168/article/details/78803655

https://zhidao.baidu.com/question/618263527798895012.html

PEACE~

最后

以上就是平淡百合为你收集整理的mysql分组 limit_mysql的分组排序limit问题的全部内容,希望文章能够帮你解决mysql分组 limit_mysql的分组排序limit问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部