低版本5.7mysql使用dense_rank() over..窗口函数的办法

首先执行select version();可以看到数据库的mysql版本为5.7.22-log

在使用 dense_rank() over()、rank() over()、row_num() over() 三个函数时, SQL错误(1064) : You have an error in your sQLsyntax; check the manual that corresponds toyour MySQL server version for the right syntax touse near "(order by salary ) ‘dense_rank’
FROM employee’ at line 1。
大概率原因:数据库版本过低,版本不支持用窗口函数。
————————————————
版权声明:本文为CSDN博主「Java~ni源」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Dfgghyyy/article/details/129714718

排名函数选中方案如下:
SQL语句中的排名分析函数
MySQL中的排名函数
而此时我们需要使用DENSE_RANK() OVER(ORDER BY qz DESC)函数来在sql中进行排名计算
具体解决sql
参考文档:
Mysql 5.7版本手写sql 实现 Mysql 8.x版本的 dense_rank() over()函数的效果
低版本mysql 实现row_number() ,rank() ,dense_rank()及其窗口函数

select * from
(
	select s.*,r.*,
	if(@Qz = s.qz,@dense_rank := @dense_rank,@dense_rank := @dense_rank + 1) as `rank`,
	@Qz := s.qz
	from xxxxxx s , (select @Qz := NULL,@dense_rank := 0) r
	order by cast(s.qz as signed) desc
) t;

我的数据库的qz是varchar类型的整形数字,排序的时候需要做转化
比如使用CAST(expression AS TYPE); 函数
类型参考
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
mysql如何将varchar转换为int类型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值