2017-03-21 22 views
1

ゲームデータベースには、マッチペアの列があります。国A対B、国C対D、国B対Aです。私は単純に2カ国の試合数を数える必要があります。私はgroupby countryA、countryBとすることができます。この:私は、以下のクエリをしようとしたが、それが動作しない理由をも実現しているABをBAグループと組み合わせたSQL(ite)

A B 27 
A C 24 
F G 2 

A B 12 
A C 24 
F G 2 
B A 15 

は今、私はこれを取得するためにABとBAを結合する必要があります。私はアイデアがなくなった。

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 

私は欠けている非常に簡単な解決策があるように感じます。何か案は?

答えて

2

簡単な解決策があります。本当に素晴らしいテクニックがあります。ここで使用できます。両国の「より小さい」とそれに続く「より大きい」2つの国の組み合わせによってグループ化することができます。このアプローチを使用すると、A, BB, 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) 

それは、二つの引数が与えられると、(またMAX()を参照)、これら2つの引数のうち小さい方を返すことができスカラーMIN()機能を有することのSQLiteの便利な機能です。

+0

ハ、これは素晴らしいです。乾杯! – Dimebag

関連する問題