gpt4 book ai didi

mysql - JOINing 表同时忽略重复项

转载 作者:行者123 更新时间:2023-11-29 06:45:08 25 4
gpt4 key购买 nike

所以,假设我有一个哈希/关系表,用于连接用户、用户可以加入的团队和团队参与的挑战 (teams_users_challenges),还有一个存储输入数据的表对于给定挑战中的所有用户 (entry_data)。我想获得挑战中每个用户的平均分数(给定一周内每天的平均值)。但是,用户有可能会以某种方式错误地加入多个团队(这不应该发生,但偶尔会发生)。以下是获取特定用户分数的 SQL 查询:

SELECT tuc.user_id, SUM(ed.data_value) / 7 as value
FROM teams_users_challenges tuc
LEFT JOIN entry_data ed ON (
tuc.user_id = ed.user_id AND
ed.entry_date BETWEEN '2013-09-16' AND '2013-09-22'
)
WHERE tuc.challenge_id = ___
AND tuc.user_id = ___

如果一位用户错误地加入了多个团队,他将在 teams_users_challenges 中有多个条目,这实际上会重复检索到的数据。因此,如果用户在 3 个不同的团队中参加相同的挑战,他将在 teams_users_challenges 中有 3 个条目,这会将他们的平均 value 乘以 3,这要归功于LEFT JOIN 自动接收所有记录,而不仅仅是一个记录。

我试过使用 GROUP BY,但这似乎并没有将数据限制为 teams_users_challenges 中的一个实例。关于如何将查询限制为仅获取 teams_users_challenges 中的一条记录,有人有任何想法吗?

附录:teams_users_challenges 中的列是team_iduser_idchallenge_id.

最佳答案

如果这是一个新的空表,您可以表达您的“业务规则”,即用户每次挑战只能加入一个团队作为 SQL 中的 unique 约束:

alter table teams_users_challenges
add constraint oneUserPerTeamPerChallenge
unique (
user_id
, team_id
, challenge_id
);

如果您无法更改表格,则需要按用户和团队分组,并从查询结果中的每个组中选择一个挑战。也许只选择最新的挑战。

关于mysql - JOINing 表同时忽略重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19055845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com