使用多列MySQL分组和排序行

时间:2017-10-04 10:09:00

标签: 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 

正如您所看到的那样,这些不是按主题排序,而是排序首先是t首先排序t,然后是一秒a的主题根据{{​​1}}然后a排序。

如果您应用b,则ORDER BY topica b t DESC,但所需结果为t b a

有什么建议吗?

2 个答案:

答案 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     |
+----+-------+