5

私が取り組んできたウェブサイトでは、ユーザーはテーブルにデータを送信することが許可されており、データを送信するときに、2人がデータの取得に取り組んでいるため、パートナー名を尋ねられます。私はハイスコアの表を作成しようとしています。これは、表に最も頻繁に表示されるパートナーと提出者の組み合わせ(順列ではない)である上位のパートナーシップをリストしたものです。

GROUPコマンドはこれには最適ですが、組み合わせ/順列の問題で少し問題が発生しました。現在、それらをグループ化すると、送信者とパートナーの順列のみがチェックされ、組み合わせはチェックされません。問題は、パートナーシップが1人が提出者であり、もう1人がパートナーであるということを交互に選択することが多いため、実際には、プルできるGROUPの2つの可能な順列があります。

現在、提出者とパートナーの順列の1つのハイスコアテーブルと、パートナーと提出者の順列の別のハイスコアテーブルをプルするコードがあります。パートナー=送信者または送信者=パートナーの場合、これらの結果(おそらくグループ化されておらず、順序付けされていない)を結合し、グループ化してから降順で並べ替える必要があります。

SELECT submitter, partner, COUNT(*) FROM submissions GROUP BY submitter, partner;

上記のコードは、送信者とパートナーの特定の順列のカウントを含むテーブルを返しますが、同じ2人がパートナーと送信者であり、切り替えたばかりの場合、それらは同じグループとしてカウントされません。

誰かがこれのコードを知っていますか?

4

1 に答える 1

6

最もきれいな解決策ではありませんが、それはあなたが望む答えを提供します:

SELECT Person1, Person2, COUNT(*) FROM (
    SELECT 
        CASE WHEN submitter < partner THEN submitter ELSE partner END AS Person1,
        CASE WHEN submitter >= partner THEN submitter ELSE partner END AS Person2
    FROM submissions
) Q
GROUP BY Person1, Person2
于 2011-04-15T06:27:22.523 に答える