mysql - 在 GROUP BY 级别上使用 "CASE"命令

标签 mysql sql group-by case

我试图获得 5 列,第 1 列是评估单位 (EU),但在接下来的 4 列中,我想计算有多少家庭(不同的 INSTANCE_ID_HOUSE)满足特定条件,但数据按居民存储。这是我使用的 4 个查询(我基本上只是想将它们组合成一个查询):

SELECT EU, COUNT( DISTINCT INSTANCE_ID_HOUSE ) FROM SENEGAL_CLEAN
WHERE CLUSTER_COMPLETE>0
GROUP BY EU
ORDER BY EU ASC

SELECT COUNT( DISTINCT INSTANCE_ID_HOUSE ) FROM SENEGAL_CLEAN
WHERE CLUSTER_COMPLETE>0 AND (W1_DRINK_SOURCE=1 OR W1_DRINK_SOURCE=4)
GROUP BY EU
ORDER BY EU ASC

SELECT COUNT( DISTINCT INSTANCE_ID_HOUSE ) FROM SENEGAL_CLEAN
WHERE CLUSTER_COMPLETE>0 AND (W2_GET_DRINK_WATER=1 OR W2_GET_DRINK_WATER=2)
GROUP BY EU
ORDER BY EU ASC

SELECT COUNT( DISTINCT INSTANCE_ID_HOUSE ) FROM SENEGAL_CLEAN
WHERE CLUSTER_COMPLETE>0 AND (S2_SEE_LATRINE=1 OR S2_SEE_LATRINE=2)
GROUP BY EU
ORDER BY EU ASC

最佳答案

您可以使用 case 语句进行计数:

    select
    eu,
    count (distinct case when cluster_complete > 0 then instance_id_house else null end) as YourAliasHere,
    count (distinct when cluster_complete > 0 and (W1_DRINK_SOURCE=1 OR W1_DRINK_SOURCE=4) then instance_id_house else null end) as YourNextAlias\
    ...
FROM SENEGAL_CLEAN
group by EU

因此,您将计算每个 case 语句中与您的条件匹配的每个 instance_id_house。我认为您可以省略 where 子句(根据您当前显示的内容)。

关于mysql - 在 GROUP BY 级别上使用 "CASE"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372369/

相关文章:

mysql - 选择每天 sum() 的最大值

php - 如何为第一个表中的每个结果查询第二个表?

MySQL - 错误 1054 (42S22) : Unknown column 'sal' in 'having clause'

sql-server - 从不同的两列中选择所有列

MySQL 按查询分组

php - 需要一个mysql查询来解决 "group by"和 "order by"不返回最新消息

mysql - 在 MySQL/Innodb 中更新后如何解锁元组?

mysql - magento 2 管理员密码更新失败错误 1064

php - utf8编码mysql查询不起作用

MySQL 有限结果后的一行求和