SQL MAX COUNT AND GROUP BY

GustlPC

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
338
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ß
 
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
 
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;
 
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 ;-)
 
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)
  • Gefällt mir
Reaktionen: Crast, psYcho-edgE und GustlPC
@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.
 
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..
 
Zurück
Oben