2012-11-16 42 views
6

我正在努力解決這個問題。我有這樣的桌子。在MYSQL中按字段排序

+-------------+-------+ 
    | type  | COUNT | 
    +-------------+-------+ 
    | A   |  1 | 
    | C   |  5 | 
    | B   |  4 | 
    +-------------+-------+ 

我想查詢表和結果必須是這樣的。

+-------------+-------+ 
| type  | COUNT | 
+-------------+-------+ 
| A   |  1 | 
| B   |  5 | 
| C   |  9 | 
| D   |  0 | 
+-------------+-------+ 

QUERY:

select type , COUNT from TABLE order by FIELD(type,'A','B','C','D') ; 

它工作正常,如果該列type具有用於 'A,B,C,d' 的值。在某些情況下,FIELD('A','B','C','D')某些列的排列在表中可能沒有價值。在這種情況下,我想爲其設置0並構造一個結果。 D表不在表中。所以把它放在'0'。

SHOW CREATE TABLE輸出

CREATE TABLE `Summary` (
    `TIMESTAMP` bigint(20) NOT NULL DEFAULT '0', 
    `type` varchar(50) NOT NULL DEFAULT '', 
    `COUNT` bigint(19) NOT NULL, 
    PRIMARY KEY (`TIMESTAMP`,`type`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
+0

你可以發表你的表的模式?是'type'和'count'結果集或原始表本身的表? –

+0

@JohnWoo我發佈了我的show create table輸出。 – kannanrbk

+0

爲什麼不嘗試設置計數列默認值爲0'COUNT' bigint(19)NOT NULL DEFAULT'0' – Sathish

回答

8

如何生根粉這一點:

select a.col as type,coalesce (`COUNT`,0) as `count` 
from 
(select 'A' as col union all 
select 'B' as col union all 
select 'C' as col union all 
select 'D' as col)a 
left join Table1 T 
on a.col=T.type 
order by FIELD(a.col,'A','B','C','D') ; 


SQL fiddle demo