【发布时间】:2020-12-25 03:09:56
【问题描述】:
我正在制作一个投注系统应用程序。我需要根据用户的投注来计算用户的分数,因为我知道有些投注可以“组合”,这使得计算比简单的加法复杂一些。
所以如果我有 3 个赌注:{points: 3, combined: false}, {points: 5, combine: true}, {points: 10, combine: true},则有 两个赌注在这里合并,所以总分应该是 3 + (5 * 2) + (10 * 2)。 现实有点复杂,因为分数并不直接在投注对象中,而是在它所指的比赛中
这是我的查询的一部分。如您所见,我首先根据匹配结果检查下注是否正确,在这种情况下,如果下注被组合,我将其乘以组合长度的值,否则我将只计算该下注的值。我试图在 CASE 中复制 COUNTIF,这给了我一个错误,例如“不能在聚合中聚合”。
SELECT
JSON_EXTRACT_SCALAR(data, '$.userId') AS userId,
COUNTIF(JSON_EXTRACT_SCALAR(data, '$.combined') = 'true') AS combinedLength,
SUM (
(
CASE WHEN JSON_EXTRACT_SCALAR(data, '$.value') = match.result
THEN IF(JSON_EXTRACT_SCALAR(data, '$.combined') = "true", match.odd * combinedLength, match.odd)
ELSE 0
END
)
) AS totalScore,
FROM data.user_bets_raw_latest
INNER JOIN matchLines ON matchLines.match.matchId = JSON_EXTRACT(data, '$.fixtureId')
GROUP BY userId
我已经找了好几天了...非常感谢您的帮助!
【问题讨论】:
-
请显示输入数据样本和预期结果。看看如何呈现Minimal, Reproducible Example
标签: sql count google-bigquery sum window-functions