2009-04-27 4 views
0

Dies bezieht sich auf die Frage, die ich zuvor gestellt, und bekam eine wirklich schnelle Antwort (max count together in an sql query). Das Problemset ist ähnlich, aber die Lösung in der previous Frage würde mich zwingen, auf eine db in einer Schleife zuzugreifen, die Leistungsprobleme verursachen wird. Also, was ich habe jetzt, nach einigen verbindet, ist:max zählen zusammen in einer SQL-Abfrage 2

id | description 
    0 | bla 
    0 | blub 
    0 | bla 
    1 | blablub 
    1 | bla 
    ... | ... 

Da u sehen können, jetzt die ID ist kein Primärschlüssel mehr. Was ich will, ist die am häufigsten verwendete Beschreibung für jede ID in der Ergebnismenge zu bekommen. Es sollte in etwa so aussehen:

id | most_popular_description | times_the_desc_appeared_for_an_id 
    0 |      bla |         2 
    1 |     blablub |         1 
... |      ... |        ... 

Antwort

1

Wenn Sie nur die beliebtesten Artikel möchten, dann glaube ich, das sollte Ihnen das Ergebnisset, das Sie suchen. Es gibt andere Möglichkeiten, dies zu tun, aber stats_mode ist der einfachste Weg, um den "häufigsten" Wert in einer Gruppe (d. H. Den Modus) zu erhalten.

Beachten Sie, dass die verschachtelte Abfrage (Inline-Ansicht) erforderlich ist, da Sie auch die Anzahl möchten.

+0

sehr cool, vielen Dank – Red33mer

1

Dies sollte den Trick tun.

select id, description, COUNT(description) 
from mytable 
group by id, description 
order by 3 desc 
+0

sry aber es ist nicht ganz das, was ich wollte, noch danke für die Hilfe – Red33mer

0

Ich denke, dass Sie die analytische Funktion dichte_rank() verwenden können, um die oberste N für jede Gruppe zu erhalten.

Etwas wie folgt aus:

select id, description, times_the_desc_appeared_for_an_id 
from 
(
    select id, description, count(description) times_the_desc_appeared_for_an_id 
    dense_rank() over (partition by id, description order by count(description) desc) position 
    from mytable 
    group by id, description 
) 
where 
    position <= 3 
order by id, times_the_desc_appeared_for_an_id; 
+0

havent getestet, da die Lösung von rwwilden funktioniert, aber trotzdem danke – Red33mer