(SELECT `size`, `type` FROM `table` WHERE `type`='a' ORDER BY `size` ASC)
UNION ALL
(SELECT `size`,`type` FROM `table` WHERE `type`='b' ORDER BY `size` DESC)
为什么这个查询没有像我希望的那样工作?它将结果数组分成“a”类型,然后是“b”类型,但在“a”类型结果中,它们不按大小排序(大小是正的 bigint)。
有什么建议么?:)
查询的结果是没有顺序的,除非你使用了一个order by子句(或者在 MySQL 中是一个group by子句)。试试这个来得到你想要的:
(SELECT `size`, `type` FROM `table` WHERE `type`='a')
UNION ALL
(SELECT `size`,`type` FROM `table` WHERE `type`='b')
order by type,
(case when `type` = 'a' then size end) asc,
(case when `type` = 'b' then size end) desc;
子查询上的排序子句通常被忽略(例外是当你有 时limit)。而且,即使不被忽略也可能不会对外部查询产生影响。
实际上,union all完全忘记:
select size, `type`
from table
where type in ('a', 'b')
order by type,
(case when `type` = 'a' then size end) asc,
(case when `type` = 'b' then size end) desc;
type子句中的第一个order by是不必要的,但我确实认为它使排序的意图更清楚。