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

连接含重复行数据的表时如何获取正确的SUM()聚合计算结果

需求说明

现有3张业务表,结构如下:

  • Users表:存储用户信息,包含id、user_name字段
  • listings表:存储条目信息,包含refno、agent_id字段
  • logs表:存储操作日志,包含refno、status字段

需要统计logs表中各状态的条目数量,同时关联展示对应用户的姓名,期望输出格式如下:

DraftPublishName
11Jason
01Jam
现有问题

目前编写的SQL语句执行后结果不符合预期:

select SUM(CASE WHEN status = 'Draft' THEN 1 END) AS draft,
       SUM(CASE WHEN status = 'Publish' THEN 1 END) AS publish, 
       u.name
from logs t 
inner join listings l on t.refno = l.refno 
inner join users u on l.agent_id=u.id
修正方案

错误原因

  1. 缺少分组逻辑:使用SUM()聚合函数时未指定分组维度,SQL会默认将所有匹配结果聚合为一行,无法按用户维度拆分统计结果
  2. 空值未兼容:原CASE语句未设置ELSE分支,当对应用户无对应状态的日志时,统计结果会返回NULL而非期望的0
  3. 字段名不匹配:Users表存储用户姓名字段为user_name,原语句中调用u.name会触发字段不存在报错

修正后SQL

SELECT 
  SUM(CASE WHEN t.status = 'Draft' THEN 1 ELSE 0 END) AS Draft,
  SUM(CASE WHEN t.status = 'Publish' THEN 1 ELSE 0 END) AS Publish,
  u.user_name AS Name
FROM logs t
INNER JOIN listings l ON t.refno = l.refno
INNER JOIN Users u ON l.agent_id = u.id
GROUP BY u.id, u.user_name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:04