我有一个这样的表(这是一个简化版):
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);
当我选择room
和kind
时,它会按照外观顺序为我提供行:
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',最后一行应该有房间='全'。是否可以在不进行复杂查询的情况下完成?
答案 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