2012-11-16 13 views
6

Staram się rozwiązać ten problem. Mam taki stół.Zamów przez FIELD w MYSQL

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

Chcę zapytać o tabelę, a wynik musi być taki.

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

zapytania:

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

Działa to dobrze, jeśli kolumna type ma wartość do 'A, B, C, D'. W niektórych przypadkach zamówienie według niektórych kolumn może nie mieć wartości w tabeli. W tym przypadku chcę wstawić 0 i skonstruować wynik.

D nie ma w tabeli. Więc wpisz "0".

SHOW CREATE tabela wyjściowa

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

można opublikować schemat tabeli? jest tabelą z 'type' i' count' zestawem wynikowym lub oryginalną tabelą? –

+0

@JohnWoo Opublikowalem mój program, tworzymy wynik tabeli. – kannanrbk

+0

dlaczego nie próbuj z domyślną wartością kolumny set count jako 0 'COUNT' bigint (19) NOT NULL DEFAULT '0' – Sathish

Odpowiedz

8

jak ABT to:

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