nach einer Transformation habe ich ein Ergebnis von einem Kreuz Join (aus Tabelle a und b), wo ich eine Analyse durchführen möchte. Die Tabelle für diese sieht wie folgt aus:Vergleichen verschiedener Spalten in SQL für jede Zeile
+-----+------+------+------+------+-----+------+------+------+------+
| id | 10_1 | 10_2 | 11_1 | 11_2 | id | 10_1 | 10_2 | 11_1 | 11_2 |
+-----+------+------+------+------+-----+------+------+------+------+
| 111 | 1 | 0 | 1 | 0 | 222 | 1 | 0 | 1 | 0 |
| 111 | 1 | 0 | 1 | 0 | 333 | 0 | 0 | 0 | 0 |
| 111 | 1 | 0 | 1 | 0 | 444 | 1 | 0 | 1 | 1 |
| 112 | 0 | 1 | 1 | 0 | 222 | 1 | 0 | 1 | 0 |
+-----+------+------+------+------+-----+------+------+------+------+
die IDs in der ersten Spalte unterscheiden sich von den IDs in der sechsten Spalte. In einer Reihe sind immer zwei verschiedene IDs, die miteinander übereinstimmen. Die anderen Spalten haben immer entweder 0 oder 1 als Wert.
Ich versuche jetzt herauszufinden, wie viele Werte (beide haben "1" in 10_1, 10_2 etc) haben zwei IDs im Durchschnitt gemeinsam, aber ich weiß nicht wirklich, wie es geht.
Ich war so etwas wie dies als Start versuchen:
SELECT SUM(CASE WHEN a.10_1 = 1 AND b.10_1 = 1 then 1 end)
Aber dies offensichtlich nur würde zählen, wie oft zwei ids 10_1 gemeinsam haben.
SELECT SUM(CASE WHEN (a.10_1 = 1 AND b.10_1 = 1)
OR (a.10_2 = 1 AND b.10_1 = 1) OR [...] then 1 end)
zählen im Allgemeinen, wie oft zwei IDs eine gemeinsam haben, aber dies würde natürlich auch zählen, wenn sie zwei oder mehr Dinge gemeinsam: Ich könnte so etwas wie dies zum Beispiel für verschiedene Spalten machen. Außerdem würde ich gerne wissen, wie oft zwei IDS zwei Dinge, drei Dinge usw. gemeinsam haben.
Ein "Problem" in meinem Fall ist auch, dass ich ungefähr ~ 30 Spalten habe, die ich mir anschauen möchte, damit ich für jeden Fall kaum jede mögliche Kombination aufschreiben kann.
Weiß jemand, wie ich mein Problem besser angehen kann? Vielen Dank im Voraus.
Edit: Ein mögliches Ergebnis könnte wie folgt aussehen:
+-----------+---------+
| in_common | count |
+-----------+---------+
| 0 | 100 |
| 1 | 500 |
| 2 | 1500 |
| 3 | 5000 |
| 4 | 3000 |
+-----------+---------+
Bearbeiten Sie Ihre Frage und zeigen die Ergebnisse, die Sie erhalten möchten. Lassen Sie mich hinzufügen, dass die "CROSS JOIN" -Ergebnisse nicht so aussehen, als ob es mit Ihrem Ziel hilft. Warum nicht diese Frage löschen? Stellen Sie eine andere Frage mit Ihren tatsächlichen Daten und einer klaren Erklärung dessen, was Sie versuchen zu tun. –
Ich habe ein mögliches Ergebnis hinzugefügt. Der Grund, warum ich das Cross mitgemacht habe, ist folgender: Ich habe zwei Subsets (wie männlich und weiblich), die ich anhand einiger Kriterien zusammenbringen möchte - und zwar mit dem Cross Join und einigen Where-Klauseln. Danach bekomme ich ein Zwischenergebnis, wie oben gezeigt, wo ich wissen möchte, wie viele Werte Männer und Frauen, die zusammen passen, im Durchschnitt gemeinsam haben. – mangix
Wie sehen Ihre Daten vor der Umwandlung aus? Die Lösung wäre einfacher, wenn Ihre Datentabelle zwei Spalten hätte, eine für die ID und eine für den Code (10_1, 10_2 usw.). –