1

我有一个包含以下字段的表:last_update, votes& uptime

现在,您将如何选择所有表last_update > 0 first然后它应该选择last_update = 0. 然后根据数量对所有内容进行排序votes,最后,uptime

last_update > 0并且last_update = 0非常重要,因为它会将服务器放在列表的顶部或底部。

它不应该排序last_update!仅排序 iflast_update > 0last_update = 0

目前我有:

SELECT * FROM servers ORDER BY votes DESC, last_update DESC, uptime_pct DESC
4

3 回答 3

4

根据SELECT 语法 [ORDER BY {col_name | expr | position} [ASC | DESC], ...],可以按顺序使用表达式语法。

所以你的查询是:

SELECT * FROM servers ORDER BY last_update>0 DESC, votes DESC, uptime_pct DESC
于 2012-05-25T15:16:31.560 回答
2
SELECT * FROM servers 
WHERE last_update > 0 
ORDER BY last_update DESC, votes DESC, uptime_pct DESC

更新:

last_update > 0用和选择行last_update = 0

SELECT * FROM servers 
ORDER BY last_update DESC, votes DESC, uptime_pct DESC

这个查询:

  • 从中选择所有行servers
  • 最近更新的服务器将显示在最上面,没有更新的服务器 ( last_update = 0) 显示在底部。
  • 如果两台服务器相同last_update,则首先显示得票最高的服务器。
  • 如果两台服务器的 和 相同last_update,则首先显示votes最高的服务器。uptime_pct
于 2012-05-25T15:15:51.637 回答
0

我对这个问题的理解是,所有 last_update > 0 并且这个列表应该根据投票和 uptime_pct 进行排序,然后你想要 last_update = 0 的所有行的列表。

SELECT * FROM servers 
 WHERE last_update > 0 
ORDER BY last_update DESC, 
         votes DESC, 
         uptime_pct DESC
UNION
SELECT * FROM servers 
 WHERE last_update = 0 
ORDER BY votes DESC, 
         uptime_pct DESC
于 2012-05-25T15:18:38.547 回答