SQL MAX COUNT AND GROUP BY

GustlPC

Lt. Junior Grade
Dabei seit
Nov. 2008
Beiträge
312
Hallo Zusammen,

ich habe folgende Ausgangstabelle (ist jetzt auf 2 PRCTR begrenzt, normal mehr):

ANZAHLPRCTRUSERID
12F45920N3394
7F45920N31266
226F45920N3923
105F45920N3658
3FDL080R3NULL
9FDL080R374
9888FDL080R31358
15FDL080R3629
1054FDL080R3236

Es soll von dem jeweiligen PRCTR die USERID mit der höchsten Anzahl ausgegeben werden, so:

PRCTRUSERID
F45920N3923
FDL080R31358

Leider komme ich nicht auf die Abfrage, wie würdet ihr das machen? Könnt ihr mir hierbei helfen?

Danke.

Gruß
 

GustlPC

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Nov. 2008
Beiträge
312
Ohne zu testen, die höchste UserId. Ist nicht das was ich suche.

Denke es ist etwas unschön, aber ich habe es wie folgt gelöst.
Nenne wir die Tabelle von oben t_PRCTR.

SQL:
SELECT aa.[PRCTR], bb.USERID
  FROM
    (SELECT MAX(a.ANZAHL) AS MAX_ANZAHL
          , a.PRCTR
       FROM
         (SELECT ANZAHL, PRCTR, USERID FROM t_PRCTR) a
     GROUP BY a.[PRCTR]) aa
LEFT JOIN
  (SELECT ANZAHL, PRCTR, USERID FROM t_PRCTR) bb
ON aa.MAX_ANZAHL = bb.ANZAHL AND aa.PRCTR = bb.PRCTR
 

derseb

Lt. Junior Grade
Dabei seit
Jan. 2015
Beiträge
449
Habs grad mal ausprobiert...

SELECT Max([Tabelle1]![UserID]) AS Ausdr1, Tabelle1.PRCTR
FROM Tabelle1
GROUP BY [Tabelle1].PRCTR;

d.h. die Lösung von DonConto passt wenn man eine kleine Änderung vornimmt...
SELECT PRCTR, MAX(USERID) FROM Tabelle GROUP BY PRCTR;
 

DonConto

Lt. Commander
Dabei seit
Juli 2004
Beiträge
1.672
Stimmt, hab ich gerade auch gemerkt. Mann muss natürlich nach PRCTR gruppieren:

SELECT PRCTR, MAX(USERID) FROM Tabelle GROUP BY PRCTR;

Hättest du es ausprobiert, hättest du das auch selbst gemerkt ;-)
 

hoppler

Cadet 4th Year
Dabei seit
Sep. 2005
Beiträge
65
Ihr lest die Aufgabenstellung einfach falsch. Es ist nicht die höchste UserID gesucht sondern die UserID mit der höchsten Anzahl gruppiert nach PRCTR.

Annahme, die Tabelle mit den Daten heißt test
SQL:
SELECT t.PRCTR, t.USERID
FROM test AS t
WHERE t.ANZAHL = (SELECT MAX(u.ANZAHL) FROM test AS u WHERE u.PRCTR = t.PRCTR);
Beachte aber: Wenn die höchste Anzahl einer Gruppe mehrfach vorkommt, wird sie auch merhfach angezeigt.
 
Zuletzt bearbeitet: (Hinweis)

Andreas_

Commander
Dabei seit
Jan. 2017
Beiträge
2.105
@derseb
Er will aber nicht die größte USERID sondern die USERID, die für ein bestimmtes PRCTR die größte Anzahl hat. Da benötigt man max(Anzahl) und nicht max(USERID)

Sprich die "Lösung" von DonConto ist keine ...

Das geht nur mit JOIN oder Subselect.

/Edit: Der hoppler war da schneller als ich. Beide Varianten wurden mittlerweile gepostet.
 

parats

Lt. Junior Grade
Dabei seit
Okt. 2018
Beiträge
387
Wieso benutzt ihr nicht einfach eine window function wie row_number und eine derived table? Subselects sind der performancekiller schlecht hin, da immer zwei roundtrips verwendet werden..
 
Top