2013-09-27 46 views
24

我的这些疑问多个条件:多COUNT()在一个查询(MySQL的)

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

有没有什么办法让这些结果在一个查询?

回答

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

如果表格有更多的颜色,上面的查询会返回所有的颜色,而不仅仅是选择的3个 – AdrianBR

+14

@AdrianBR:这是比较字面上的问题,并且没有看到实际的底层问题。 – eggyal

+5

@eggyal'SELECT color,COUNT(*)FROM t_table WHERE color IN('YELLOW','BLUE','RED')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'; 

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

您接受了关于您的请求的唯一不正确答案。您接受的答案会返回所有颜色,而不仅仅是您选择的3个颜色。 – AdrianBR

31

如果你想要得到的结果是在一排,你可以使用:

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

或者只是'SUM(color ='YELLOW')'等 – eggyal

+1

@eggyal是的,但很难看到这里发生了什么,你不能选择像'SUM(IF(color ='YELLOW' ,0.75,0))。 – eisberg

+0

感谢您的支持。而且重量也是有用的。 – TrtG

0

你可以做到这一点使用子查询。

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

看来你需要围绕嵌套SELECT语句的括号,至少在PostgreSQL中。 – Wolverine

+1

你确定这是一个查询吗? –

+0

是啊@AliSherafat – Faisal

0

这就是我的回答:埃斯特Ejemplo SQL籼拉cantidad德UN了GrupoŸ苏马洛杉矶encontrado CON S y时ñPOR separado。 Se que no es la Respuesta pero puede ser usado para otros casos。本迪托海以色列。

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 

我希望这可以帮助你。