mysql - 使用多列 MySQL 对行进行分组和排序

标签 mysql

我想根据相同的列值进行行。
假设这是一个表

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 tDESCt 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/

相关文章:

mysql - 在mysql中选择多个条件

mysql - 复杂的 MySQL SELECT 查询

mysql - 笛卡尔加入 MySQL 查询

php - MySQL 如何选择 n 天后的日期,n 是 'duration' 列中存在的值

mysql - 重新启动Docker Compose并更新数据库

php - 表tr背景颜色变化

php - 获取字段名称及其值并在 php 中进行编辑

Mysql - 根据主表中的值从连接表中获取行

php - Laravel 请求的预加载器

mysql - 客户端连接错误 : invalid values of 'columnLabel'