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

如何筛选出在所有赛事中至少赢得一轮比赛的用户?

筛选所有赛事中至少赢一轮的用户

问题分析

你的原SQL逻辑错误在于:试图让单条results记录同时满足属于多个赛事的赢局条件——但一条记录只能对应一个轮次、一个赛事,所以永远查不到符合条件的结果。

正确思路是:统计每个用户赢过的唯一赛事数量,判断这个数量是否等于需要覆盖的总赛事数(或指定赛事的数量)。

正确SQL实现

针对所有赛事的情况

如果要筛选在全部赛事中都至少赢过一轮的用户:

SELECT r.user_id
FROM results r
JOIN rounds ro ON r.round_id = ro.id
JOIN categories c ON ro.category_id = c.id
WHERE r.result = 1 -- 标记为赢局的条件
GROUP BY r.user_id
HAVING COUNT(DISTINCT c.competition_id) = (SELECT COUNT(*) FROM competitions);

针对指定赛事集合的情况

如果只需要检查特定赛事(比如你示例中的赛事7、8、9):

SELECT r.user_id
FROM results r
JOIN rounds ro ON r.round_id = ro.id
JOIN categories c ON ro.category_id = c.id
WHERE r.result = 1 
  AND c.competition_id IN (7, 8, 9) -- 指定要覆盖的赛事ID
GROUP BY r.user_id
HAVING COUNT(DISTINCT c.competition_id) = 3; -- 数字需与IN中的赛事数量一致

逻辑说明

  1. 通过JOIN关联四个表,将用户的赢局记录对应到所属赛事
  2. 按user_id分组,用COUNT(DISTINCT c.competition_id)统计该用户赢过的不同赛事数量
  3. HAVING子句判断统计数量是否等于目标赛事总数,确保用户覆盖了所有要求的赛事

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:22