SQL(ite)将AB与BA组合

时间:2017-03-21 09:34:42

标签: sql sqlite

游戏数据库具有匹配对的列,例如国家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

我觉得我有一个非常简单的解决方案。有什么想法吗?

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())。