SQL Problem mit max() auf mehrere Tabellen

Gossi91

Neuer Benutzer
Beiträge
3
Erstmal Hallo an alle :)

Ich habe ein Problem bei dem ich leider nicht weiter komme.

Ich habe eine Tabelle mit mehreren Einträgen, die Tabelle ist (vereinfacht) so aufgebaut:

id | bezugsort | austellungsort | [irrelevante Felder]

Jede id hat dabei einen bezugsort und einen austellungsort (sind fk's). Ich möchte nun gerne zu einer Liste an austellungsorten jeweils wissen, zu welchem bezugsort es die meisten einträge gibt. Als kleines Beispiel:

select count(*), bezugsort from table where ausstellungsort = 001 group by bezugsort;

Danach bekomme ich eine Liste die so aussieht:
count(*) | bezugsort
1 | 010
5 | 011
24 | 038

Jetzt möchte ich aber nur den Eintrag mit der maximalen Anzahl haben, da ich aber, egal wie, kein Statement mit max hinbekomme, welches auch funktioniert, hab ich mir dazu das hier gebaut:

select count(*), bezugsort from table where ausstellungsort = 001 and (select bezugsort from (select bezugsort, count(*) as cnt from table where ausstellungsort = 001 group by bezugsort order by cnt desc) where rownum <= 1) group by bezugsort;

Das ganze funktioniert soweit für einen einzigen austellungsort auch ganz gut, allerdings brauche ich das zu einer Liste an austellungsorten und da wirds dann leider haarig und da hänge ich momentan fest.

Über eine Antwort würde ich mich freuen.
Mit freundlichen Grüßen
Gossi91
 
Werbung:
1. Dein Select "klappt soweit ganz gut" ? Wirklich... ? Schmeißt mir nämlich ORA-00936: Ausdruck fehlt...
Da es ein 'And (Sub-Select)' nicht gibt... :) Zumindest nicht in Oracle :)

2. Bei allem unter Oracle 12c gibt es kein Limit / Top

Das ginge dann so:
Code:
Select bezugsort
      ,anzahl
From   (Select t.bezugsort
              ,Count(*) As anzahl
        From   Table t
        Where  t.bezugsort In ('Deine Werte-Liste')
        Group  By t.bezugsort
        Order  By Count(*) Desc)
Where  rownum = 1
 
Danke für die schnellen Antworten, aber leider bekomme ich dabei nur den Bezugsort mit den meisten einträgen, ich will aber zu jedem austellungsort den bezugsort mit den meisten einträgen haben, mache das ganze nun (etwas umständlich) so:

create table tmp_table as select bezugsort, austellungsort, count(*) anzahl from table group by bezugsort, austellungsort;

select t.bezugsort from tmp_table t, (select austellungsort, max(anzahl) anzahl from tmp_table group by austellungsort) tmax where tmax.austellungsort = t.austellungsort and tmax.anzahl = t.anzahl and austellungsort in (LISTE)

Und soweit ich das bisher sagen kann, schauts ganz gut aus, zumindest die ersten 100 Zeilen.
 
Brauchst du nicht...
Geht einfach so:
Code:
Select ausstellungsort,
       bezugsort,
       anzahl
From (Select t.ausstellungsort
      ,t.bezugsort
      ,count(t.bezugsort) as anzahl
      ,row_number() over(Partition By t.ausstellungsort Order By count(t.bezugsort) desc) as temp
From   table t
Group  By t.ausstellungsort, t.bezugsort)
Where temp = 1
Du benutzt ja immerhin kein MySQL :D
 
Werbung:
Zurück
Oben