mysql 按分隔正值和负值的数字列排序

mysql order by numeric column separating positive and negative values

我想列出按重量升序排列的重量列的正值,然后按任意顺序列出负值。

这是我试过的:

SELECT *
FROM `mytable`
WHERE weight >= 0
ORDER BY weight 
UNION
SELECT *
FROM `mytable`
WHERE weight < 0
ORDER BY weight

我得到了:

SQL Error (1221): Incorrect usage of UNION and ORDER BY

只需使用一个查询,然后使用适当的 order by:

SELECT *
FROM `mytable`
ORDER BY (weight >= 0) desc,
         weight;

MySQL 将数字上下文中的布尔值视为数字,因此表达式 (weight >= 0) 被视为“1”(正数)和“0”(负数)。

在任何情况下,您都不能依赖于 union 查询的顺序,因为删除重复项会对顺序产生任何影响。您不应该依赖 union all 的排序,因为 SQL 中没有任何内容要求第一个子查询的行在第二个子查询的行之前返回(尽管实际上这是真的)。​​

请注意:您遇到的错误是由第一个 order by 而不是第二个引起的。