我想根据相同的列值进行行。
假设这是一个表
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
正如您所看到的,它们既不是按主题排序,也不是按 ID 排序,而是对先出现的主题进行排序,如果 t
首先排序 t
首先,一秒 a
来,然后根据 a
然后 b
排序。
如果您应用ORDER BY topic
,它会排序a b t
或DESC
t b a
,但所需的结果是t a b
有什么建议吗?
最佳答案
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 |
+----+-------+
关于mysql - 使用多列 MySQL 对行进行分组和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46562226/