2012-11-16 40 views
6

私はこれを解決するために苦労しています。私はこのようなテーブルを持っています。注文:FIELD in 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のOUTPUTどのようにこのABT

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

set countカラムのデフォルト値を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