mysql按数字列顺序分隔正负值

时间:2015-07-23 12:01:10

标签: mysql sql-order-by

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

这是我尝试过的:

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

1 个答案:

答案 0 :(得分:1)

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

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

MySQL将数字上下文中的布尔值视为数字,因此表达式(weight >= 0)被视为&#34; 1&#34; (积极的)和&#34; 0&#34; (对于否定)。

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

作为备注:您获得的错误是由第一个order by引起的,而不是第二个Options +FollowSymLinks -MultiViews RewriteEngine on RewriteBase / # skip all files and directories from rewrite rules below RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] RewriteRule ^([^/]+)/([^/]+)/([^/]+)/(.+)$ index.php?lang=$1&page=$2&detail=$3 [L,QSA] RewriteRule ^([^/]+)/([^/]+)/(.+)$ index.php?lang=$1&page=$2 [L,QSA] RewriteRule ^([^/]+)/(.+)$ index.php?lang=$1 [L,QSA]