You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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错误说明

  1. 第一段SQL:

    • 聚合函数COUNT不能嵌套在MAX里使用,属于语法错误
    • OR用于数值时会将结果转为布尔值,无法实现字段数统计逻辑
    • 缺少GROUP BY email,无法按邮箱分组计算
  2. 第二段SQL:

    • COUNT(条件OR...)只会统计该行是否至少有一个字段满足条件,返回的是满足此条件的行数,而非每个行内满足条件的字段数
    • 同样缺少GROUP BY email,无法按邮箱分组

内容的提问来源于stack exchange,提问作者Thommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:23:16