2013-09-27 10 views

risposta

45
SELECT color, COUNT(*) FROM t_table GROUP BY color 
+1

se la tabella ha più colori, la query sopra restituisce tutti i colori, non solo i 3 selezionati – AdrianBR

+14

@AdrianBR: questa è la domanda piuttosto letterale e non si riesce a vedere l'effettivo problema sottostante. – eggyal

+5

@eggyal 'SELEZIONA colore, CONTEGGIO (*) DA t_table DOVE COLORE IN ('GIALLO', 'BLU', 'ROSSO') GROUP BY color ' – josephdpurcell

8
SELECT 'yellow' as color ,COUNT(*) FROM t_table WHERE color = 'YELLOW' 
union 
SELECT 'blue' , COUNT(*) FROM t_table WHERE color = 'BLUE' 
union 
SELECT 'red',COUNT(*) FROM t_table WHERE color = 'RED'; 

o

select color, count(*) from table where color in ('red', 'blue', 'yellow') group by 1 
+2

hai accettato l'unica risposta errata relativa alla tua richiesta. la tua risposta accettata restituisce tutti i colori, non solo i 3 selezionati. – AdrianBR

31

Se si desidera che il risultato di essere in una riga è possibile utilizzare:

SELECT 
    SUM(IF(color = 'YELLOW', 1, 0)) AS YELLOW, 
    SUM(IF(color = 'BLUE', 1, 0)) AS BLUE, 
    SUM(IF(color = 'RED', 1, 0)) AS RED 
FROM t_table 

Working example

+4

O semplicemente 'SUM (colore = 'GIALLO')' ecc. – eggyal

+1

@eggyal Sì, ma è difficile vedere cosa sta succedendo qui e non puoi scegliere di contare con pesi come 'SUM (IF (color = 'YELLOW') , 0,75, 0)) '. – eisberg

+0

Grazie per questo. E anche la cosa del peso può essere utile. – TrtG

0

È possibile farlo usando subquery .

SELECT(
    SELECT COUNT(*) FROM t_table WHERE color = 'YELLOW', 
    SELECT COUNT(*) FROM t_table WHERE color = 'BLUE', 
    SELECT COUNT(*) FROM t_table WHERE color = 'RED' 
); 
+1

Sembra che sia necessaria una parentesi attorno alle istruzioni SELECT nidificate, almeno in PostgreSQL. – Wolverine

+1

sei sicuro che questa è una domanda? !! –

+0

yeah @AliSherafat – Faisal

0

Questa è la mia risposta: Este Ejemplo SQL Indica la cantidad de un Grupo y los Suma encontrado con S y N por separado. Se non si rispecchia la risposta per il nostro caso per gli altri. Mare di Bendito Israele.

SELECT sm_med_t_servicios.id as identidad, count(sm_adm_t_admision.id) as cantidad , 
SUM(IF(sm_adm_t_admision.atendido = 'S', 1, 0)) AS atendidos, 
SUM(IF(sm_adm_t_admision.atendido = 'N', 1, 0)) AS por_ver 

FROM sm_med_t_servicios 
LEFT JOIN sm_adm_t_admision ON sm_med_t_servicios.id = sm_adm_t_admision.sm_med_t_servicios_id 
WHERE sm_med_t_servicios.m_empresas_id = '2' 
GROUP BY sm_med_t_servicios.id 

Spero che questo ti aiuti.