私は自分自身にテーブルを接続し、クエリを持っています。結果には重複行(並べ替え)が含まれています。このクエリの目的は、最も頻繁に一緒に購入される製品のリストを作成することです。最初の6つの結果は、異なる順序で、同じ接続であることをのMySQL:なくし、それ自体にテーブルを結合重複行
+-------------+-------------+-------------+--------+
| ITEM | ITEM2 | ITEM3 | oCount |
+-------------+-------------+-------------+--------+
| 02B13.04.GP | 77A04.10 | 45A04.04.GP | 54 |
| 02B13.04.GP | 45A04.04.GP | 77A04.10 | 54 |
| 77A04.10 | 45A04.04.GP | 02B13.04.GP | 54 |
| 45A04.04.GP | 02B13.04.GP | 77A04.10 | 54 |
| 77A04.10 | 02B13.04.GP | 45A04.04.GP | 54 |
| 45A04.04.GP | 77A04.10 | 02B13.04.GP | 54 |
| 57B01.01.GP | 57B01.11.GP | 57B01.10.GP | 12 |
| 57B01.10.GP | 57B01.11.GP | 57B01.01.GP | 12 |
| 57B01.01.GP | 57B01.10.GP | 57B01.11.GP | 12 |
| 57B01.10.GP | 57B01.01.GP | 57B01.11.GP | 12 |
| 57B01.11.GP | 57B01.10.GP | 57B01.01.GP | 12 |
| 57B01.11.GP | 57B01.01.GP | 57B01.10.GP | 12 |
注:
SELECT o1.ITEM
,o2.ITEM as ITEM2
,o3.ITEM AS ITEM3
,count(DISTINCT o1.ORDERNUM) as oCount
FROM orders o1
INNER JOIN orders o2 ON o2.ORDERNUM = o1.ORDERNUM AND o2.ITEM != o1.ITEM
LEFT OUTER JOIN orders o3 ON o3.ORDERNUM = o1.ORDERNUM AND o3.ITEM != o2.ITEM AND o3.ITEM != o1.ITEM
GROUP BY o1.ITEM, o2.ITEM, o3.ITEM
ORDER BY oCount DESC
そして、最初の12件の結果:このクエリを考えてみましょう。 2番目の6つの結果には同じ問題があります(これは結果全体を通じて続きます)。私の目標は、各アイテムグループの各組み合わせに対して1つの行ではなく、各アイテムグループに対して1つのレコードを持つことです。私はこれらの繰り返しの結果を回避することができますどのように
?
また、このクエリに対するより効率的なアプローチに関するアドバイスは、歓迎します(私は追加の参加を追加したいが、1,000,000件の注文ではリソース要件が満たされていない)。
============================================== ==
EDIT:あなたがテーブル構造を共有することができダルシャンの質問
に答えるために:
表には、すべての注文のための行が含まれています。注文に複数の商品が含まれている場合は、商品ごとに1つの商品が表示されます(注文に複数の商品がある場合)。このクエリの唯一の懸念事項は次のとおりです。
ORDERNUM CHAR : Order Number
ITEM CHAR : SKU for the item
QTY INT : Quantity purchased
ORDDATE DATETIME : Order Date
返された結果:上記の結果サンプルに記載されているものがすべて必要です。目的は、最も頻繁に一緒に購入される製品のリストを取得することです。あなたが何をしたいか
あなたがの構造を共有できます注文表と予想される出力? –
@DarshanMehta私はそれが仕事をしてくれたおかげで – mwex501