Vinzenz Mai: Counter über 2 Spalten

Beitrag lesen

Hallo,

userid_1  userid_2
23        45
53        23
23        45
45        23
45        23
23        77

was ich möchte wäre einen counter der die Häufigkeit zählt und gruppiert - so dass nur eine Paarung von userid_1 und user_id2 vorkommt:

userid_1  userid_2  counter
23        45        4
53        23        1
23        77        1

offensichtlich ist es Dir gleichgültig, ob userid_1 aus userid_1 oder userid_2 stammt :-)

Wenn die Werte in den beiden Spalten stets ungleich sind, so kannst Du Dich auf den Fall beschränken, dass der Wert in der ersten Spalte kleiner ist als der Wert in der zweiten Spalte:

a) wir formen die Ausgangsdaten entsprechen um:

SELECT  
   userid_1 user1,   -- die Spaltennamen des ersten Selects bestimmen die  
   userid_2 user2    -- Spaltennamen des Resultats, hier mit Aliasnamen  
FROM  
   tabelle  
WHERE  
   userid_1 < userid_2  
-- und fügen anschließend alle Werte ein, bei denen der Wert in der zweiten  
-- Spalte kleiner ist als in der ersten.  
UNION ALL  
SELECT  
   userid_2,  
   userid_1  
FROM  
   tabelle  
WHERE  
   userid2 > userid_1

Diese Ergebnismenge dient uns als Ausgangspunkt für das Gruppieren und Zählen:

SELECT  
   s.user1,  
   s.user2,  
   COUNT(*) counter  
FROM (  
    SELECT  
       userid_1 user1,  
       userid_2 user2  
    FROM  
       tabelle  
    WHERE  
       userid_1 < userid_2  
    UNION ALL  
    SELECT  
       userid_2,  
       userid_1  
    FROM  
       tabelle  
    WHERE  
       userid2 > userid_1  
) s                             -- es ist wichtig, der inneren Abfrage einen  
                                -- Namen zu geben!

liefert mit Deinen Ausgangsdaten:

user1  user2  counter
---------------------
  23     45      4
  23     53      1
  23     77      1

mit der von mir genannten Einschränkung das von Dir gewünschte Resultat.

Dürfen auch gleiche Werte vorkommen, so ersetze einen der beiden Operatoren durch einen, der auch auf Gleichheit passt.

Freundliche Grüße

Vinzenz