Könnten Sie mir bitte mit einer sehr schwierigen Frage helfen?SQL: Aggregieren von Paaren ohne JOIN (herausfordernd)
Ich habe eine Tabelle ‚itemslog‘ in MySQL DBMS mit zwei Spalten: ‚Benutzer-ID‘ und ‚itemid‘, sieht aus wie:
| user1 | item 1 |
| user1 | item 2 |
| user2 | item 1 |
| user2 | item 2 |
| user2 | item 3 |
ich zählen müssen, wie viele Nutzer jedes Paar Artikel haben, I. G. Antwort wie folgt aus:
| item1 | item2 | 2 |
| item1 | item3 | 1 |
| item2 | item3 | 1 |
Normalerweise wir Abfrage basierend auf JOIN-Operationen verwenden können, wie folgt aus:
SELECT
t1.itemname,
t2.itemname,
count(*)
FROM
itemslog AS t1
CROSS JOIN itemslog AS t2 ON t1.userid = t2.userid
WHERE
t1.itemname < t2.itemname
GROUP BY
t1.itemname, t2.itemname;
Aber es braucht eine Menge Berechnungen und in meiner Situation ist es sinnlos, (ich habe über 200k Reihen). Kannst du mir einen Rat geben, gibt es andere Möglichkeiten, das zu tun? Vielen Dank im Voraus!
Es ist mir nicht klar, was Sie hier zu zählen versuchen. Willst du sehen, ob ein bestimmter Benutzer bestimmte Gegenstände hat? Oder etwas anderes? –
Haben Sie eine andere Tabelle 'items', in der' itemid' der Primärschlüssel ist - eine Referenztabelle? – trincot
Jeder Benutzer konnte eine beliebige Menge an Gegenständen tragen. Für jedes Elementpaar möchte ich die Anzahl der Benutzer zählen, die es beide tragen. Im Beispielpaar item1 & item2 tragen Sie zwei Benutzer und paaren Sie item1 & item3 - nur eins. –