【发布时间】:2014-06-29 00:08:24
【问题描述】:
我有下表:
CREATE TABLE `data`
(`id` int, `x` int, `y` int);
INSERT INTO `data`
(`id`, `x`, `y`)
VALUES
(1, 5, 7),
(2, 9, 3),
(3, 4, 6),
(4, 0, 0),
(5, 0, 0),
(6, -1, 2);
我需要从表中选择所有数据,并按 (x, y) 对中的最大值对它们进行升序排序。但只有 x 和 y 都大于 0 的值。 (x, y) 对中的一个小于 0 的行应放置在有序值下方,其余行位于所选列表的末尾。
我有以下 SQL 查询:
SELECT `x`, `y`, GREATEST (`x`, `y`) as `result` FROM `data`
ORDER BY `result`=0, `result`=-1, `result` ASC
这给了我以下结果:
X Y RESULT
-1 2 2
4 6 6
5 7 7
9 3 9
0 0 0
0 0 0
但我想要的结果是:
X Y RESULT
4 6 6
5 7 7
9 3 9
-1 2 2
0 0 0
0 0 0
SQLfiddle:http://www.sqlfiddle.com/#!2/995d2/6
【问题讨论】:
-
btw .. 我知道查询是错误的,因为如果我选择
result作为 (x,y) 中的最大值,条件result=-1 将永远不会为真。如果两个值都是“-1”,则此查询有效,但如果只有一个值是“-1”,我需要修改它才能工作。