2011-01-08 10 views
0

Angesichts dieser Tabelle:finden die höchste Anzahl von Vorkommen in einer Spalte in SQL

Bestellen
CustName Beschreibung to_char (Preis)
A desa $ 14
B desb $ 14
C ab $ 21
D DESD $ 65
E dese 21 $
F Desf 78 $
G DESG 14 $
H DESH $ 21

0 in diesem Fall $ 14 und $ 21

Ich glaube, es muss sein, eine Unterabfrage

Ich versuche, die ganze Reihe, wo die Preise, die höchsten Vorkommen haben anzuzeigen. Also begann ich mit diesem aus:

select max(count(price)) 
from orders 
group by price 

, die mir gibt 3.

nach einiger Zeit, die ich nicht glaube, das war hilfreich. Ich glaube, ich brauchte den Wert 14 und 21 eher die Anzahl, so dass ich das in die Where-Klausel setzen kann. aber ich bin fest, wie man das anzeigt. irgendeine Hilfe?

UPDATE: Also habe ich es die 14 und 21 aus dieser

select price 
    from orders 
    group by price 
    having (count(price)) in 
    (select max(count(price)) 
    from orders 
    group by price) 

abfragen, aber ich brauche es die CUSTNAME und Beschreibung Spalte angezeigt werden, die ich einen Fehler:

select custname, description, price 
from orders 
group by price 
having (count(price)) in 
(select max(count(price)) 
from orders 
group by price) 

SQL Error: ORA-00979: not a GROUP BY expression 

jede Hilfe dabei?

+0

Werfen Sie einen Blick auf meine Antwort –

+0

ist Ihre Antwort meine erste Frage oder die Update-Frage mit dem Fehler zu helfen? Ich habe versucht, mit Ihrem, aber ich bekomme einige Fehler zu – Ronnie

Antwort

1

Ich denke du bist ziemlich nah dran. Da, auf der gruppierten Ergebnismenge arbeitet, versuchen

HAVING COUNT(price) IN 

oder

HAVING COUNT(price) = 

Ihre aktuelle Zeile zu ersetzen.

+0

ich vermasselte es herum und bekam das gleiche. trotzdem danke! – Ronnie

-1

Sie könnten versuchen, so etwas wie

select * from orders where price in (select top 2 price from orders group by price order by price desc) 

Ich bin nicht sicher, ob Ergebnisse in Oracle, SQL Server zu begrenzen oben ist, sollten Sie vielleicht Limit verwenden.

+0

das ist Hausaufgaben und ich habe die Top-Funktion noch nie gelernt (aber in der Zukunft hilfreich), also glaube ich nicht, dass ich es benutzen kann. trotzdem danke! – Ronnie

+0

TOP ist in Oracle nicht verfügbar. Es ist in SQL Server und wahrscheinlich einigen anderen Datenbanken verfügbar –

0

Da Sie die Frage als oracle markiert haben, können Sie windowing functions verwenden, um Aggregat- und Detaildaten innerhalb derselben Abfrage abzurufen.

SELECT COUNT (price) OVER (PARTITION BY price) count_at_this_price, 
     o.* 
from orders o 
order by 1 desc 
0
select employee, count(employee) 
from work 
group by employee 
having count(employee) = 
(select max(cnt) from 
(select employee, count(employee cnt 
from work 
group by employee 
) 
); 

Reference

Verwandte Themen