You need to enable JavaScript to run this app. SQL 如何统计每个用户接受Oxygen治疗的次数?
优惠活动
大模型
产品
解决方案
定价
更多

SQL 如何统计每个用户接受Oxygen治疗的次数?

问题根因
  • 原SQL存在4个问题,直接导致结果失真/报错:
    1. FROM子句多余关联无匹配条件的Treatment t表:没有给t和其他表设置关联逻辑,会触发笛卡尔积,把匹配的关联表行数凭空放大,最终统计值错误。
    2. 子查询字段名写错:使用的Treatment.Nombre在给定表结构中不存在,实际对应字段为Name,会直接触发语法报错。
    3. 治疗名称拼写不匹配:要筛选的治疗名为Oxygen,原SQL写的匹配值是'Oxigen',会导致子查询返回空,匹配逻辑失效。
    4. GROUP BY字段不全:如果数据库开启严格校验模式,仅按v.ID_Victim分组会报错,需要把SELECT里的非聚合字段v.Name也加入分组条件。
修正方案

精简写法(无冗余关联)

SELECT v.Name, COUNT(tv.ID_Treatment_Victim) AS Times
FROM Victim v
INNER JOIN Treatment_Victim tv 
  ON v.ID_Victim = tv.ID_Victim
WHERE tv.ID_Treatment = (
    SELECT ID_Treatment
    FROM Treatment
    WHERE Name = 'Oxygen'
)
GROUP BY v.ID_Victim, v.Name
ORDER BY Times DESC 
LIMIT 5;

通用关联写法(可读性更强)

SELECT v.Name, COUNT(tv.ID_Treatment_Victim) AS Times
FROM Victim v
INNER JOIN Treatment_Victim tv 
  ON v.ID_Victim = tv.ID_Victim
INNER JOIN Treatment t 
  ON tv.ID_Treatment = t.ID_Treatment
WHERE t.Name = 'Oxygen'
GROUP BY v.ID_Victim, v.Name
ORDER BY Times DESC 
LIMIT 5;
示例数据验证结果

按照给出的测试数据,执行后输出:

NameTimes
John2
Alex1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 05:15:03