栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL 5.6-类似于DENSE_RANK的功能,无需订购

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL 5.6-类似于DENSE_RANK的功能,无需订购

对于 MySQL版本
<8.0
(OP的版本是5.6):

问题陈述看起来需要DENSE_RANK功能

groupVarian
; 但是事实并非如此。正如 @Gordon
Linoff

解释的

那样

您似乎希望按它们在数据中出现的顺序来枚举它们。

假设您的表名是

t
(请为您的代码相应地更改表名和字段名)。这是一种利用会话变量的方法(
对于MySQL的较早版本 ),给出期望的结果( DB Fiddle ):

SET @row_number = 0;SELECt t3.caseID,        t3.groupVarian,        CONCAt('v', t2.num) AS nameVarianFROM  (   SELECt      (@row_number:=@row_number + 1) AS num,      t1.groupVarian    FROM      (      SELECt DISTINCT groupVarian       FROM t       ORDER BY caseID ASC      ) AS t1   ) AS t2 INNER JOIN t AS t3   ON t3.groupVarian = t2.groupVarian ORDER BY t3.caseID ASC

另外:
我之前的模拟

DENSE_RANK
功能的尝试效果很好。尽管也可以对先前的查询进行一些微调以实现
DENSE_RANK
功能。但是,以下查询效率更高,因为它创建的
Derived表较少 ,并避免了 JOIN on
groupVarian

SET @row_number = 1;SET @group_varian = '';SELECt inner_nest.caseID,        inner_nest.groupVarian,        CONCAt('v', inner_nest.num) as nameVarian FROM (        SELECt  caseID,  @row_number:=CASE     WHEN @group_varian = groupVarian THEN @row_number     ELSE @row_number + 1   END AS num,  @group_varian:=groupVarian as groupVarian         FROM t          ORDER BY groupVarian     ) AS inner_nest ORDER BY inner_nest.caseID ASC


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405322.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号