高级查询 - 选择,按条件求和并返回累加值
Posted
技术标签:
【中文标题】高级查询 - 选择,按条件求和并返回累加值【英文标题】:Advance query - Select, sum on condition and return the accumulated value 【发布时间】:2019-01-05 11:58:14 【问题描述】:用户预测给定比赛的球队获胜者。根据预测的球队以及预测是否正确,根据所选球队的赔率授予不同的分数。考虑以下两个 SQL 表及其字段。
和
如果比赛 ID 30 的预测正确(意思是 predictions.team_id
需要与 matches.match_winner
匹配),我想要一个汇总所有用户赔率的查询。最终结果应该是这样的
Matthew 预测正确匹配 5 和 7(赔率 3.4 + 2.4),共 5.8 分。
内维尔预测正确匹配 7 和 9(赔率 2.4 + 2.0),共 4.4 分
【问题讨论】:
可能是因为您的结果与建议和接受的答案相矛盾。只是一个猜测,不要忘记我们是为社区而不是为我们自己打勾。 【参考方案1】:使用带有条件SUM
的聚合查询,例如:
SELECT
p.username,
SUM(CASE WHEN m.match_winner = m.team_a THEN m.team_a_odds ELSE m.team_b_odds END)
FROM
predictions p
INNER JOIN matches m
ON p.match_id = m.id AND p.team_id = m.match_winner
WHERE p.tournament_id = 30
GROUP BY p.username
【讨论】:
Neville predicted correctly match 7 and 9 (odds 2.4 + 2.0), total 4.4 points
这不满意。【参考方案2】:
SELECT
USERNAME,
SUM(IF(CASE WHEN MATCH_WINNER = TEAM_A, TEAM_A_ODDS, TEAM_B_ODDS))
FROM
PREDICTIONS
INNER JOIN MATCHES
ON MATCH_ID = MATCHES.ID AND
TEAM_ID = MATCH_WINNER
GROUP BY USERNAME;
但由于 Neville predicted correctly match 7 and 9 (odds 2.4 + 2.0), total 4.4 points
不满足...
SELECT
USERNAME,
SUM( TEAM_B_ODDS)
FROM
PREDICTIONS
INNER JOIN MATCHES
ON MATCH_ID = MATCHES.ID AND
TEAM_ID = MATCH_WINNER
GROUP BY USERNAME;
OP 总是对 TEAM_B_ODDS 求和
虽然我相信 OP 评估 Naville
的情况是错误的。
【讨论】:
以上是关于高级查询 - 选择,按条件求和并返回累加值的主要内容,如果未能解决你的问题,请参考以下文章