游戏数据库具有比赛配对列,例如国家A对B,国家C对D,以及国家B对A。我只需要简单地计算两个国家之间的比赛次数。我可以对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
我觉得我缺少一个非常简单的解决方案。有任何想法吗?
最佳答案
有一个简单的解决方案,确实是一个很好的技巧,您可以在此处使用。您可以按两个国家的“较小”然后是两个国家的“较大”的组合进行分组。使用这种方法,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())。