2012-11-16 22 views
6

Sto lottando per risolvere questo. Ho una tabella come questa.Ordina per CAMPO in MYSQL

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

Voglio interrogare la tabella e il risultato deve essere come questo.

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

DOMANDA:

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

E funziona bene se la colonna type ha valore per 'A, B, C, D'. In alcuni casi l'ordine di FIELD('A','B','C','D') alcune colonne potrebbe non avere un valore nella tabella. In questo caso voglio mettere 0 per questo e costruire un risultato.

D non è presente nella tabella. Quindi metti '0' per questo.

SHOW CREATE TABLE USCITA

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

è possibile inviare lo schema della tabella? è la tabella con 'type' e' count' un set di risultati o la tabella originale stessa? –

+0

@JohnWoo Ho pubblicato il mio spettacolo per creare l'output della tabella. – kannanrbk

+0

perché non provare con il valore predefinito della colonna count count come 0 'COUNT' bigint (19) NOT NULL DEFAULT '0' – Sathish

risposta

8

come circa questo:

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