我希望根据相同的列值进行排列 假设这是一个表
id name topic
1 A t
2 B a
3 c t
4 d b
5 e b
6 f a
我希望结果像这样。
id name topic
1 A t
3 c t
2 B a
6 f a
4 d b
5 e b
正如您所看到的那样,这些不是按主题排序,而是排序首先是t
首先排序t
,然后是一秒a
的主题根据{{1}}然后a
排序。
如果您应用b
,则ORDER BY topic
或a b t
DESC
,但所需结果为t b a
有什么建议吗?
答案 0 :(得分:1)
您可以在CASE
中使用ORDER BY
表达式。
<强>查询强>
select * from `your_table_name`
order by
case `topic`
when 't' then 1
when 'a' then 2
when 'b' then 3
else 4 end
, `name`;
答案 1 :(得分:1)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,topic CHAR(1) NOT NULL
);
INSERT INTO my_table VALUES
(1,'t'),
(2,'a'),
(3,'t'),
(4,'b'),
(5,'b'),
(6,'a');
SELECT x.*
FROM my_table x
JOIN
( SELECT topic, MIN(id) id FROM my_table GROUP BY topic ) y
ON y.topic = x.topic
ORDER
BY y.id,x.id;
+----+-------+
| id | topic |
+----+-------+
| 1 | t |
| 3 | t |
| 2 | a |
| 6 | a |
| 4 | b |
| 5 | b |
+----+-------+