一个查询中的多个条件的多个 COUNT() (MySQL)

Posted

技术标签:

【中文标题】一个查询中的多个条件的多个 COUNT() (MySQL)【英文标题】:Multiple COUNT() for multiple conditions in one query (MySQL) 【发布时间】:2013-10-03 12:25:49 【问题描述】:

我有这些疑问:

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

有没有办法在一个查询中获得这些结果?

【问题讨论】:

附加答案:dba.stackexchange.com/a/23118/152804. 【参考方案1】:
SELECT color, COUNT(*) FROM t_table GROUP BY color

【讨论】:

如果表格有更多颜色,上面的查询返回所有颜色,而不仅仅是选择的3种 @AdrianBR:这是字面上的问题,没有看透实际的潜在问题。 @eggyal SELECT color, COUNT(*) FROM t_table WHERE color IN ('YELLOW', 'BLUE', 'RED') GROUP BY color【参考方案2】:

如果您希望结果在一行中,您可以使用:

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

【讨论】:

或者只是SUM(color='YELLOW') @eggyal 是的,但很难看出这里发生了什么,你不能选择像SUM(IF(color = 'YELLOW', 0.75, 0)) 这样的权重来计算。 感谢这个。重量的东西也很有用。 其实,如果你想返回一个包含每种颜色计数的数组,这个解决方案更合适。 很好的答案。这比公认的要好,因为有时您没有可以分组的东西。 (例如查询不同时间范围时。)【参考方案3】:
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

【讨论】:

您接受了关于您的请求的唯一错误答案。您接受的答案会返回所有颜色,而不仅仅是您选择的 3 种颜色。【参考方案4】:

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

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'
);

【讨论】:

看来您需要在嵌套的 SELECT 语句周围加上括号,至少在 PostgreSQL 中是这样。 你确定这是一个查询吗?!! 是的@AliSherafat @Faisal 如果我需要编写类似的查询来更新另一个表中的 1 个表,那么该怎么做。【参考方案5】:

我认为这也适合你

select count(*) as anc,(select count(*) from Patient where sex='F')as 
        patientF,(select count(*) from Patient where sex='M') as patientM from anc

你甚至可以像这样选择和统计相关的表

select count(*) as anc,(select count(*) from Patient where 
    Patient.Id=anc.PatientId)as patientF,(select count(*) from Patient where
    sex='M') as patientM from anc

【讨论】:

【参考方案6】:

这是我的答案:Este Ejemplo SQL Indica la cantidad de un Grupo y Suma los encontrado con S y N 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

我希望这对你有帮助。

【讨论】:

以上是关于一个查询中的多个条件的多个 COUNT() (MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle -- 多个count统计一张表中多个字段等于某值

单个查询中的多个聚合和分组

BigQuery - 使用子查询和OR语句加入多个条件

单个 SQL 查询中的多个计数

laravel中选择多个表列和别名条件

mongo中的高级查询之聚合操作(distinct,count,group)与数据去重