低版本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类型

你可能感兴趣的:(工作总结,mysql,数据库)