MySQL按邮箱分组统计多整数字段符合条件数量的实现咨询
正确SQL实现方案
你的需求是按email分组,统计每个邮箱对应的满足值>0的整数字段总数,问题出在原来的SQL逻辑错误且缺少分组语句,以下是正确实现:
核心思路
对每个目标整数字段,判断其是否>0,满足则记为1,否则记为0,最后将所有字段的判断结果求和,再按email分组即可得到每个邮箱对应的符合条件的字段数量。
正确SQL代码
SELECT email, -- 对每个字段判断后求和,统计符合条件的字段数 IF(500_K > 0, 1, 0) + IF(1_Million > 0, 1, 0) + IF(2_Million > 0, 1, 0) + IF(5_Million > 0, 1, 0) + IF(10_Million > 0, 1, 0) + IF(Faehnrich > 0, 1, 0) + IF(Kapitaen > 0, 1, 0) + IF(Admiral > 0, 1, 0) + IF(Thrall > 0, 1, 0) + IF(Jarl > 0, 1, 0) + IF(Koenig > 0, 1, 0) + IF(Explosiv > 0, 1, 0) + IF(Roter_Stern > 0, 1, 0) + IF(Roter_Teufel > 0, 1, 0) + IF(1_Jahr > 0, 1, 0) + IF(2_Jahre > 0, 1, 0) + IF(5_Jahre > 0, 1, 0) + IF(10_Jahre > 0, 1, 0) + IF(Unter_10_Prozent > 0, 1, 0) + IF(Unter_5_Prozent > 0, 1, 0) + IF(Unter_1_Prozent > 0, 1, 0) + IF(Ehrenmitglied_1 > 0, 1, 0) + IF(Ehrenmitglied_2 > 0, 1, 0) + IF(Ehrenmitglied_3 > 0, 1, 0) + IF(The_Big_Cut > 0, 1, 0) + IF(Seelenbaum > 0, 1, 0) AS ANZ FROM user__abzeichen GROUP BY email;
原SQL错误说明
第一段SQL:
- 聚合函数
COUNT不能嵌套在MAX里使用,属于语法错误 OR用于数值时会将结果转为布尔值,无法实现字段数统计逻辑- 缺少
GROUP BY email,无法按邮箱分组计算
- 聚合函数
第二段SQL:
COUNT(条件OR...)只会统计该行是否至少有一个字段满足条件,返回的是满足此条件的行数,而非每个行内满足条件的字段数- 同样缺少
GROUP BY email,无法按邮箱分组
内容的提问来源于stack exchange,提问作者Thommy
相关产品推荐
相关产品推荐

