【发布时间】:2020-09-23 08:32:11
【问题描述】:
假设我有一个表格“在比赛中得分的球员”,其结构如下,其中球员 1 在比赛中得分两次(出现两次),球员 5 得分一次:
playerId | odd
1 | 15
2 | 30
1 | 15
而且我有一组我选择的球员 ID,我打赌会在那场比赛中得分。
用例 1
选择的玩家 ID:[1, 5] 在这里,我打赌玩家 1 和 5 将在比赛中得分一次(ids 在数组中出现一次)。由于玩家 id 1 在比赛中实际得分两次,我的赌注仍然部分正确,所以我的得分是 15。
用例 2
选择的玩家 ID:[1, 1, 5] 在这里,我打赌玩家 id 1 将得分两次(在我选择的 id 中出现两次),id 5 将得分一次。 由于玩家 id 1 在比赛中得分两次,我的得分是 15 + 15。
用例 3
选择的球员 ID:[1, 1, 5] 让我们假设球员 1 在比赛中得分一次。 我的赌注是部分正确的。我得到 +15。
用例 4
选择的玩家 ID:[3]。 我打赌 plyaer id 3 得分,事实并非如此,我得到 0 分。
这是一个代码示例,其中我有两个用例,第一个是使用 Mikhail 的解决方案可以正常工作,但不是第二个:
DECLARE matchs STRING;
DECLARE bets STRING;
SET matchs = "[{'playerId': 550, 'odd': 15, 'scored_at': 1}, {'playerId': 550, 'odd': 15, 'scored_at': 2}]";
/* Use case 1 -- working */
/*SET playerIdSelected = "[550, 9]";*/
/* Use case 2 -- NOK */
SET playerIdSelected = "[550, 9, 550]";
SELECT
SUM(CAST(first_odd AS INT64)) total
FROM (
SELECT ARRAY_AGG(JSON_EXTRACT_SCALAR(scorers, '$.odd') ORDER BY JSON_EXTRACT_SCALAR(scorers, '$.scored_at') LIMIT 1)[OFFSET(0)] first_odd,
FROM UNNEST(JSON_EXTRACT_ARRAY(matchs, '$.')) AS scorers
WHERE JSON_EXTRACT_SCALAR(scorers, '$.playerId') IN UNNEST(JSON_EXTRACT_ARRAY(playerIdSelected))
GROUP BY JSON_EXTRACT_SCALAR(scorers, '$.playerId')
)
【问题讨论】:
-
那么,仍然不清楚第二种情况不起作用。您能否以明文形式提供示例输入和预期输出,以便我们更好地帮助您
-
你是对的。我用预期的输出重写了我的帖子和用例,如果还不清楚,请告诉我:)