MySQL实现Oracle的rank over(partition by...order by)叠加start with...connect by...prior...函数
发布日期:2022-03-03 10:44:10
浏览次数:9
分类:技术文章
本文共 1940 字,大约阅读时间需要 6 分钟。
建表SQL
SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `tb_tags`;CREATE TABLE `tb_tags` ( `bid` tinyint(1) unsigned NOT NULL AUTO_INCREMENT, `pid` tinyint(1) NOT NULL DEFAULT '0', `label` varchar(32) COLLATE utf8_bin NOT NULL, `hits` tinyint(1) NOT NULL, `weight` tinyint(1) NOT NULL, PRIMARY KEY (`bid`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
组内排序
IF ( @lev = rc.grade, @rank := @rank + 1, @rank := 1)
分层级联查询
SELECT id_grp.grade, b.bid, b.label, b.hits, b.weightFROM (SELECT @ids AS _ids, (SELECT @ids := GROUP_CONCAT(bid)FROM tb_tagsWHERE FIND_IN_SET(pid, @ids) ) AS cids, @l := @l + 1 AS gradeFROM tb_tags, (SELECT @ids := 2, @l := 0) bWHERE @ids IS NOT NULL ) id_grp, tb_tags bWHERE FIND_IN_SET(b.bid, id_grp._ids)ORDER BY grade, bid
完整的查询SQL
SELECT rc.bid, rc.label, rc.hits, rc.weight,IF ( @lev = rc.grade, @rank := @rank + 1, @rank := 1) AS rank, (@lev := rc.grade) AS gradeFROM ( SELECT id_grp.grade, b.bid, b.label, b.hits, b.weight FROM ( SELECT @ids AS _ids, ( SELECT @ids := GROUP_CONCAT(bid) FROM tb_tags WHERE FIND_IN_SET(pid, @ids) ) AS cids, @l := @l + 1 AS grade FROM tb_tags, (SELECT @ids := 2, @l := 0) b WHERE @ids IS NOT NULL ) id_grp, tb_tags b WHERE FIND_IN_SET(b.bid, id_grp._ids) ORDER BY grade, bid ) rc, (SELECT @rank := 0, @lev := NULL) rdORDER BY grade, rc.hits DESC, rc.weight DESC
结果如图
参考
转载地址:https://blog.csdn.net/yangjiegang8/article/details/106452105 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月05日 17时55分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
spring boot 与 Ant Design of Vue 实现左侧组织树(二十三)
2019-04-27
spring boot 与 Ant Design of Vue 实现新增组织(二十四)
2019-04-27
spring boot 与 Ant Design of Vue 实现修改组织(二十五)
2019-04-27
spring boot 与 Ant Design of Vue 实现删除组织(二十六)
2019-04-27
Druid连接池实现自定义场景的多数据库的连接
2019-04-27
PL/SQL数据库管理工具的使用
2019-04-27
带你玩转属于自己的spring-boot-starter系列(一)
2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二)
2019-04-27
带你玩转属于自己的spring-boot-starter系列(三)
2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现
2019-04-27
FTP文件管理项目(本地云)项目日报(二)
2019-04-27
FTP文件管理项目(本地云)项目日报(三)
2019-04-27
FTP文件管理项目(本地云)项目日报(七)
2019-04-27
什么是服务熔断?
2019-04-27
服务器压力过大?CPU打满?我来帮你快速检查Linux服务器性能
2019-04-27
C++面经总结之《Effective C++》(一)
2019-04-27
C++面经总结之《Effective C++》(二)
2019-04-27