MySQL中CASE语句结合变量的用法

做题时碰到如下题目:

查询出报销费用在前三位的报销类型和报销总费用,并通过排序函数显示名次。(如果消费金额相同显示相同的名次)

出错点在于CASE语句,代码如下:

使用的mysql版本:8.0.22

SELECT typeName,suap,
CASE
WHEN @priRank=suap THEN @nowRank
WHEN @priRank:=suap THEN @nowRank:=@nowRank+1
END RANK
FROM (SELECT typeName,SUM(applyAmount) AS suap
FROM expenseType
LEFT JOIN  expenseDetail ON expenseDetail.typeId = expenseType.exId
GROUP BY typeId
ORDER BY suap DESC) AS a,(SELECT @nowRank:=0,@priRank:=NULL) AS b;

报错信息:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'RANK FROM (SELECT typeName,SUM(applyAmount) AS suap FROM expenseType LEFT JOIN  ' at line 5

目的:

1.当priRank检测出值等于时,输出nowRank

2.第二条WHEN语句给priRank赋值然后输出nowRank+1同时更新nowRank的值

诉求:希望能了解到如何解决该问题以及CASE语句的正确用法

 

【已解决】

错误原因:8.0.18版本后不能使用RANK作为别名

更改别名后可正常运行

case语句不能用变量,只能用字段名称

WHEN suap=1 THEN ‘1对应的值’

case  

when  列名= 条件值1   then  选项1

when  列名=条件值2    then  选项2.......

else    默认值 end