游戏数据库具有匹配对的列,例如国家A对B,国家C对D,但国家B对A.我需要简单计算2个国家之间的比赛数。我可以通过countryA,countryB进行分组,例如这样:
A B 12
A C 24
F G 2
B A 15
现在我需要结合AB和BA才能得到这个:
A B 27
A C 24
F G 2
我已经尝试了以下查询,但也意识到它为什么不起作用。我没有想法了。
SELECT country_1, country_2, t1.count + t2.count AS count, total
FROM (SELECT country_1, country_2, COUNT(*) AS count
FROM games
WHERE tournament_code=?
GROUP BY country_1, country_2) t1
LEFT JOIN (SELECT country_1, country_code_2, COUNT(*) AS count
FROM games
WHERE tournament_code=?
GROUP BY country_1, ccountry_2) t2
ON t1.country_1=t2.country_2 AND t1.country_2=t2.country_1
我觉得我有一个非常简单的解决方案。有什么想法吗?
答案 0 :(得分:2)
有一个简单的解决方案,真的是一个很好的技巧,你可以在这里使用。您可以通过两个国家中“较小”的组合进行分组,然后是两个国家中“较大”的组合。使用此方法,A, B
将被视为与B, A
位于同一组中。然后,汇总每个组的计数,以得出您想要的结果。
SELECT MIN(country_1, country_2) AS country_1,
MAX(country_1, country_2) AS country_2,
SUM(count) AS count
FROM games
-- WHERE tournament_code = ?
GROUP BY MIN(country_1, country_2),
MAX(country_1, country_2)
SQLite的一个有用功能是它有一个标量MIN()函数,给定两个参数,可以返回这两个参数中较小的一个(也见MAX())。