游戏数据库具有比赛配对列,例如国家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())。

10-07 15:11