Übereinstimmungsquote von Attributen berechnen

hansdampf

Neuer Benutzer
Beiträge
1
Hallo zusammen,
ich habe eine MySQL DB und die Tabelle VorschlagProdukte mit folgendem Aufbau:
- nr
- userid
- produkt
- vorschlagA1
- vorschlagA2
- vorschlagA3
- vorschlagA4
- vorschlagB1
- vorschlagB2
- vorschlagB3
- vorschlagB4

Es geht darum zwei Arten von Produktvorschlägen zu vergleichen. Methode "A" ist die bisherige und "B" die neue. Jetzt möchte ich die Übereinstimmungsquote der Werte von A & B berechnen und diese gestaffelt nach "eine Übereinstimmung vorhanden", "zwei Übereinstimmungen vorhanden", "drei Übereinstimmungen vorhanden" sowie "komplette Übereinstimmung" und eine "Durchschnittliche Übereinstimmung" ausgeben.

Mein bisheriger Ansatz war sowas:
SELECT * FROM `VorschlagProdukte` WHERE `vorschlagA1` = `vorschlagB1` OR `vorschlagA1` = `vorschlagB2` OR `vorschlagA1` = `vorschlagB3` OR `vorschlagA1` = `vorschlagB4`

Gibt es für meine Ausgangssituation ein elegantes SQL Statement? Als Alternative habe ich noch die Möglichkeit jede einzelne Kombination einzeln zu testen, allerdings artet dass dann spätestens bei "drei Übereinstimmungen" z.B. sehr aus.

Vielen Dank schon mal!
 
Werbung:
Suchst Du soetwas?

Du hast:

Code:
test=*# select * from hansdampf ;
 id | a1 | a2 | a3 | a4 | b1  | b2  | b3  | b4  
----+----+----+----+----+-----+-----+-----+-----
  1 |  1 |  2 |  3 |  4 |  1 |  2 |  3 |  4
  2 |  1 |  2 |  3 |  4 | 100 | 200 | 300 | 400
(2 Zeilen)

und willst wissen, wie oft Ax mit Bx übereinstimmt? Bei id=1 also 4 und bei id=2 also 0, ja?

Code:
test=*# select *, case when a1=b1 then 1 else 0 end + case when a2=b2 then 1 else 0 end + case when a3=b3 then 1 else 0 end + case when a4=b4 then 1 else 0 end as match from hansdampf ;
 id | a1 | a2 | a3 | a4 | b1  | b2  | b3  | b4  | match
----+----+----+----+----+-----+-----+-----+-----+-------
  1 |  1 |  2 |  3 |  4 |  1 |  2 |  3 |  4 |  4
  2 |  1 |  2 |  3 |  4 | 100 | 200 | 300 | 400 |  0
(2 Zeilen)

Oder jedes Ax mit jedem Bx vergleichen? Das geht genauso, ist nur eine Fleißarbeit, die aber recht schnell ausarten dürfte ...
 
Werbung:
Schöner wäre vermutlich ein vernünftiges Tabellendesign:
- nr
- userid
- produkt
- vorschlag
Dann ließe sich auch gut mit GROUP BY und count() arbeiten.

Was steht denn in den Vorschlagsfeldern, Text oder Zahlen?
 
Zurück
Oben