在mysql中使用case ORDER BY

mat*_*att 6 php mysql sql sorting

我有一个表格,包括:项目,排名分数和用户投票数.为简单起见:id,rank,votes.

我正在尝试运行一个查询,它将项目从最高排名分数排序到最低,除非投票数= 0.

因为我有新项目的基本排名分数,所以无法订购我的排名.

我尝试了以下以及其他一些排列:

$list = $dbh->query('SELECT * FROM ranks ORDER BY votes desc, rating desc case when min(votes)= 0 else rating desc');
Run Code Online (Sandbox Code Playgroud)

无果,后看: 在MySQL条件排序条件排序在MySQL?

我试过这个:

SELECT * FROM ranks ORDER BY rating desc, case votes when 0 then votes end 
Run Code Online (Sandbox Code Playgroud)

这是表,我得到的输出:

ID : Rating : Votes
2 : 201 : 9
3 : 100 : 0
4 : 100 : 0
5 : 100 : 0
1 : -13 : 9
Run Code Online (Sandbox Code Playgroud)

我理想的输出是:

ID : Rating : Votes
2 : 201 : 9
1 : -13 : 9
4 : 100 : 0
5 : 100 : 0
3 : 100 : 0
Run Code Online (Sandbox Code Playgroud)

如您所见,这并未将所有0个投票项目分组到最后.

我确信这是前额简单,我真的很感激任何指针和最佳实践.干杯!

小智 5

这组全部0结束.

SELECT * FROM `ranks` ORDER BY (Votes=0), Rating DESC
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 1

询问

SELECT * 
FROM ranks 
ORDER BY case votes 
WHEN 0 THEN 0 
ELSE 1 END DESC, rating DESC
Run Code Online (Sandbox Code Playgroud)

ORDER BY 部分的意思是:

  • 对于 SELECT 查询,当 votes = 0(某项没有投票)时,mySQL 会将票数视为 0。
  • 否则 - 对于所有其他票数,请考虑票数 = 1。
  • END - 结束“案件”
  • DESC - 将我们新考虑的投票(0 或 1)从最高到最低排序。即将 1 分组在顶部。
  • 评级 DESC - 次要排序条件,在主要排序条件内,从最高评级到最低评级排序。