按多列排序 MySQL
Sort by multiple columns MySQL
我有一个 table,其中有三个数据类型为 INT、INT 和 INT 的字段。
我想使用所有这三列对我的 select 查询进行排序。如果字段 A <= 10,则按 ASC 排序,按 DESC 字段 2 排序,按 ASC 字段 3 排序。
SELECT * FROM table1 WHERE id=uid
ORDER BY
CASE table1.field1
WHEN table1.field1 < 11 THEN table1.field1
END
ASC,
table1.field2 DESC,
table1.field3 ASC;
+------+--------+---------+
|field1| field2 | field3 |
+------+--------+---------+
| 1 | 4 | 1 |
+------+--------+---------+
| 2 | 3 | 2 |
+------+--------+---------+
| 9 | 2 | 4 |
+------+--------+---------+
| 10 | 1 | 7 |
+------+--------+---------+
出于某种原因,CASE
并没有真正起作用,如果我排除它起作用,但确实按 ASC 顺序对所有 field1 进行了排序,而我只想要 10 首先。
WHEN
之前不需要table1.field1
:
SELECT *
FROM table1
WHERE id = uid
ORDER BY CASE WHEN table1.field1 < 11 THEN table1.field1 END ASC,
table1.field2 DESC,
table1.field3 ASC;
解释:
CASE table1.field1
WHEN table1.field1 < 11 THEN table1.field1
END -- this evaluates to true/false (1 and 0)
=>
CASE table1.field1 WHEN 1 THEN table1.field1 END
我有一个 table,其中有三个数据类型为 INT、INT 和 INT 的字段。
我想使用所有这三列对我的 select 查询进行排序。如果字段 A <= 10,则按 ASC 排序,按 DESC 字段 2 排序,按 ASC 字段 3 排序。
SELECT * FROM table1 WHERE id=uid
ORDER BY
CASE table1.field1
WHEN table1.field1 < 11 THEN table1.field1
END
ASC,
table1.field2 DESC,
table1.field3 ASC;
+------+--------+---------+
|field1| field2 | field3 |
+------+--------+---------+
| 1 | 4 | 1 |
+------+--------+---------+
| 2 | 3 | 2 |
+------+--------+---------+
| 9 | 2 | 4 |
+------+--------+---------+
| 10 | 1 | 7 |
+------+--------+---------+
出于某种原因,CASE
并没有真正起作用,如果我排除它起作用,但确实按 ASC 顺序对所有 field1 进行了排序,而我只想要 10 首先。
WHEN
之前不需要table1.field1
:
SELECT *
FROM table1
WHERE id = uid
ORDER BY CASE WHEN table1.field1 < 11 THEN table1.field1 END ASC,
table1.field2 DESC,
table1.field3 ASC;
解释:
CASE table1.field1
WHEN table1.field1 < 11 THEN table1.field1
END -- this evaluates to true/false (1 and 0)
=>
CASE table1.field1 WHEN 1 THEN table1.field1 END