1

uploadID に対して 2 つのパッケージが同時に使用された回数をカウントする使用ログのクエリを作成しようとしています。つまり、uploadID ごとに 2 つのパッケージが何回出現するかを知りたいのです。これは、MySQL にデータを保存したテーブルのサンプルです。

uploadID  package  
1         value1
1         value2
1         value3

2         value2
2         value3
2         value4

3         value1
3         value3
3         value4

4         value1
4         value3
4         value4

私が探している出力は次のようになります。

Concurrent Packages    Count
value1 & value2          1
value1 & value3          3
value1 & value4          2
value2 & value3          2
value2 & value4          1  
value3 & value4          3

これを達成するために多くのクエリを試しましたが、何も機能していないようです。理想的には、カウントを取得したら、次のように出力をマトリックスに入れたいと思います。

        value1  value2  value3  value4
value1    -       1       3       2
value2    1       -       2       1     
value3    3       2       -       3
value4    2       1       3       -

これを達成する方法について何か提案をいただければ幸いです。データは MySQL データベースに保存されていますが、最終的なマトリックスは PHP Web アプリケーションでレンダリングされます。前もって感謝します。

4

1 に答える 1

3

最初のバージョンをシンプルに保つと、これで目的が達成されるはずです。

SELECT CONCAT(a.package, ' & ', b.package) "Concurrent Packages",
       COUNT(*) "Count"
FROM packages a
CROSS JOIN packages b
WHERE a.package<b.package AND a.uploadid=b.uploadid
GROUP BY a.package,b.package
ORDER BY a.package,b.package

ここでSQLFiddle 。

2 番目のバージョンについては、 MySQL で実行できますが、ソリューションはかなり複雑になります。試してみたい場合は、開始するための情報がここにあります。

クエリの簡単な説明。CROSS JOINテーブルとそれ自体の間の は、行のすべての組み合わせを返します。値がアルファベット順で、uploadid が一致するもののみをカウントするように除外しますWHERE(アルファベット順はそれを避けるためでa matching bありb matching a、2 つの別個の一致としてカウントされます)。その後、COUNT行数GROUP BY、値を取得して、組み合わせごとのカウントを取得します。

于 2012-09-16T21:24:43.060 に答える