MySQLを使用している共通の顧客の数が最も多いビジネスのペアを見つけようとしています。SQLで最大の一致数を持つ列のIDのペアを特定
+------------+------------+
| BusinessID | CustomerID |
+------------+------------+
| A | 1 |
| A | 2 |
| A | 3 |
| B | 4 |
| B | 1 |
| B | 3 |
| B | 2 |
| C | 3 |
| C | 4 |
| C | 5 |
+------------+------------+
そして私は、出力は、企業のペアと共通する顧客の数になりたい、このように:
テーブルには、次のようなものです
+-------------+-------------+------------------------+
| BusinessID | BusinessID | Common Customers Count |
+-------------+-------------+------------------------+
| A | B | 3 |
| A | C | 1 |
| B | C | 2 |
+-------------+-------------+------------------------+
これはクエリです私は書いた:
SELECT a.BusinessID,b.BusinessID,COUNT(*) AS ncom
FROM (SELECT BusinessID, CustomerID FROM MYTABLE) AS a JOIN
(SELECT BusinessID,CustomerID FROM MYTABLE) AS b
ON a.BusinessID < b.BusinessID AND a.CustomerID = b.CustomerID
GROUP BY a.BusinessID, b.BusinessID
ORDER BY ncom
私のデータセットは約5mの行を持っていると、これはそうです大規模なデータセットでは非効率的です。データを制限することで、小規模なデータセットのクエリをテストしました.20k行に対して10k行と30秒を処理するのに8秒かかったので、このクエリは5m行には実行できませんでした。クエリをより速く書くために他にどのようにすればよいですか?
奇妙な要件です:
また、テーブルに以下の指標を与えます。詳しく教える? – bc004346
@ bc004346スピードに関する要件はありますか?データセット全体でクエリを実行するには、1日でなくても数時間かかるでしょう。ちょうど良い方法がなければならないと思っただけです。 –