2016-06-11 13 views
2

Ich versuche, die Häufigkeit oder Anzahl der Spieler Kompositionen mit SQL zu finden. Hier ist mein DatasetSo finden Sie die am häufigsten verwendete Gruppe von Spielern

event key     team_id player_id 
12235384031441051453625936 1  27 
12235384031441051453625936 1  11 
12235384031441051453625936 1  42 
12235384031441051453625936 1  15 
12235384031441051453625936 1  6 
12235384031441051453625936 2  30 
12235384031441051453625936 2  35 
12235384031441051453625936 2  9 
12235384031441051453625936 2  6 
12235384031441051453625936 2  28 
12235384031441051453626082 1  14 
12235384031441051453626082 1  28 
12235384031441051453626082 1  27 
12235384031441051453626082 1  9 
12235384031441051453626082 1  6 
12235384031441051453626082 2  11 
12235384031441051453626082 2  27 
12235384031441051453626082 2  42 
12235384031441051453626082 2  15 
12235384031441051453626082 2  6 

So für jede Veranstaltung gibt Spieler auf Team 1 und Team 2, die player_ids einen Spieler darstellen. Ich habe ungefähr 500 Events und viele dieser Spieler werden in mehreren Events erscheinen, aber nicht immer mit den gleichen Spielern. Jedes Team hat immer 5 Spieler und die Ereignisschlüssel repräsentieren ein Spiel. Also habe ich im Grunde 500 des obigen Datensatzes.

Ich versuche, die am häufigsten verwendete Teamzusammensetzung zu finden. Wenn ich zum Beispiel den obigen Datensatz verwende, sehe ich die Spieler 27, 11, 42, 15, 6 in einem Ereignis mit der Endung 936 und das Ereignis mit der Endung 082. Basierend auf diesem Datensatz hat diese Teamzusammensetzung einen COUNT von 2 Ich versuche, eine Ausgabe zu bekommen, die die Anzahl der Male zählt, die eine Gruppe von Spielern in derselben Mannschaft zusammen erscheint, und ich kämpfe mit einer kohärenten Aussage, die das tut.

+0

Sie brauchen eine bessere Beschreibung dessen, was Sie tun. Willst du immer genau fünf Spieler? –

+0

Ja, es müssen 5 Spieler sein. Ich werde weiter in meinem ursprünglichen Beitrag klären. – user3348557

Antwort

5

Ich denke, der einfachste Weg, die häufigste die Zusammensetzung des Teams zu erhalten, ist listagg() zu verwenden, um die Mitglieder zusammen zu bringen:

select players, count(*) as numevents 
from (select listagg(player_id, ',') within group (order by player_id) as players 
     from t 
     group by eventkey, team_id 
    ) p 
group by players 
order by count(*) desc; 
+0

Ah, ich denke das macht es. Danke so mcuh. – user3348557

0

Eines der Dinge, die ich in Stackoverflow mag, ist, Probleme etwas von anderen zu lernen. Da ich diese Frage und die Antwort von Gordon Linoff (+1 für beide) mochte, poste ich die SQL Server-Version basierend auf seiner Antwort, da ich versucht habe, sie zu reproduzieren, aber es gibt keine List-Tags auf MSSQL. Wer weiß, ob es für jemanden hilfreich ist, der das gleiche Problem hat, aber ein anderes DBMS.

Tabelle (Ohne das große Ereignis-IDs)

DECLARE @t1 TABLE (event_key INT, team_id INT, player_id INT) 

INSERT INTO @t1 VALUES (1,1,27); 
INSERT INTO @t1 VALUES (1,1,11); 
INSERT INTO @t1 VALUES (1,1,42); 
INSERT INTO @t1 VALUES (1,1,15); 
INSERT INTO @t1 VALUES (1,1,6); 
INSERT INTO @t1 VALUES (1,2,30); 
INSERT INTO @t1 VALUES (1,2,35); 
INSERT INTO @t1 VALUES (1,2,9); 
INSERT INTO @t1 VALUES (1,2,6); 
INSERT INTO @t1 VALUES (1,2,28); 
INSERT INTO @t1 VALUES (2,1,14); 
INSERT INTO @t1 VALUES (2,1,28); 
INSERT INTO @t1 VALUES (2,1,27); 
INSERT INTO @t1 VALUES (2,1,9); 
INSERT INTO @t1 VALUES (2,1,6); 
INSERT INTO @t1 VALUES (2,2,11); 
INSERT INTO @t1 VALUES (2,2,27); 
INSERT INTO @t1 VALUES (2,2,42); 
INSERT INTO @t1 VALUES (2,2,15); 
INSERT INTO @t1 VALUES (2,2,6); 

-Code

select players, count(*) as numevents 
from (select stuff((
    SELECT ', ' + CAST(player_id as nvarchar) 
    FROM @t1 as t1 
    WHERE t1.event_key=t2.event_key 
    AND t1.team_id=t2.team_id 
    ORDER BY player_id 
    FOR XML PATH('') 
    ), 1, 2, '') as players 
     from @t1 as t2 
     group by event_key, team_id 
    ) p 
group by players 
order by count(*) desc; 
Verwandte Themen