更改SQL查询中的行顺序

时间:2017-06-03 12:33:56

标签: mysql sql

我有一个这样的表(这是一个简化版):

create table t(
  id integer primary key auto_increment,
  room varchar(10),
  kind char(1),
  value double
  );

insert into t(room,kind,value) values
  ('009','T',23),
  ('009','H',35),
  ('All','P',740),
  ('008','T',22),
  ('008','H',35),
  ('106','T',22),
  ('106','H',38),
  ('006','H',40),
  ('006','T',25),
  ('All','P',740);

当我选择roomkind时,它会按照外观顺序为我提供行:

select distinct room, kind from t;

| room | kind |
|------|------|
|  009 |    T |
|  009 |    H |
|  All |    P |
|  008 |    T |
|  008 |    H |
|  106 |    T |
|  106 |    H |
|  006 |    H |
|  006 |    T |

我希望结果如下:

|  room  | kind |
|--------|------|
|  room1 |    T |
|  room1 |    H |
|  room2 |    T |
|  room2 |    H |
................
|  All   |    P | <-- this should be the last row

即。每个房间应该有'T'然后是'H',最后一行应该有房间='全'。是否可以在不进行复杂查询的情况下完成?

3 个答案:

答案 0 :(得分:1)

我认为你只是在寻找order by

select distinct room, kind
from t
order by (room = 'All') asc,  -- put 'All' last
         room, kind desc;

为什么这样做? MySQL将布尔表达式(例如(room = 'All'))视为数字,其中1表示true,0表示false。因此,&#34; true&#34;值在&#34; false&#34;之后排序。值。

注意:您的数据似乎没有重复值为room / kind的行。如果您没有重复项,请使用select而不是select distinct

答案 1 :(得分:0)

简单地

select distinct kind,room  from t;

答案 2 :(得分:0)

以数字开头的每个字符串,例如&#39; 01&#39;,&#39; 54154A&#39;总是小于字符串,以&#39; A&#39;开头。字符,例如&#39; ALL&#39;

试试吧

select distinct room, kind from t order by room