MySQL多字段分组统计需求:无需WHERE子句实现多维度计数
解决多维度分组统计的SQL方案
嘿,我懂你的需求啦——你不想每次只能统计单个primaryAssembly的独立BadgeID数量,而是希望一次查询就能按SessionNumber和EventDate分组,同时算出多个不同primaryAssembly对应的distinct BadgeID数,直接得到多列统计结果对吧?
你可以用条件聚合的写法来实现,不需要WHERE子句过滤,直接在聚合函数里加判断逻辑就行。修改后的SQL语句如下:
SELECT SessionNumber, EventDate, COUNT(DISTINCT CASE WHEN primaryAssembly = 'Critical Care' THEN BadgeID END) AS CriticalCareCount, COUNT(DISTINCT CASE WHEN primaryAssembly = 'Pulmonary Circulation' THEN BadgeID END) AS PulmonaryCirculationCount -- 如果还有其他需要统计的primaryAssembly,继续按上面的格式加列就行 FROM beacon GROUP BY SessionNumber, EventDate ORDER BY EventDate;
简单解释下这个写法:
CASE WHEN primaryAssembly = 'XXX' THEN BadgeID END:只有当primaryAssembly匹配目标值时,才返回对应的BadgeID,否则返回NULLCOUNT(DISTINCT ...):会自动忽略NULL值,统计每个分组下符合条件的独立BadgeID数量- 这样你可以一次性把所有需要统计的
primaryAssembly都写成单独的列,不需要拆分多次查询或者用WHERE过滤
如果后续需要新增其他primaryAssembly的统计,只需要在SELECT里再加一行类似的COUNT(DISTINCT CASE...)语句就行,非常灵活。
内容的提问来源于stack exchange,提问作者user1098063
相关产品推荐
相关产品推荐

