我试图获得 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/