2011-01-08 71 views
0

列鑑於此表出現次數的最高數量:查找在SQL

訂購
CUSTNAME描述TO_CHAR(價格)
一個DESA $ 14
乙desb $ 14
Ç說明$ 21
d可持續發展教育十年$ 65
ËDESE $ 21
˚Fdesf $ 78
ģDESG $ 14
ħDESH $ 21

我試圖顯示整行那裏的價格具有最高occurances,在這種情況下,$ 14和$ 21

我認爲需要有一個子查詢。於是我開始了這一點:

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

這一段時間,我不認爲這是有幫助之後給了我3

。我相信我需要價值14和21而不是數量,所以我可以把它放在where子句中。但我堅持如何顯示。任何幫助?

更新:所以我得到了它查詢到該

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

的14和21,但我需要它來顯示CUSTNAME和描述列,我得到一個錯誤:

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 

任何幫助這個?

+0

看看我的回答是 – 2011-01-08 20:17:51

+0

你的答案幫助我的最初的問題或錯誤的更新問題?我試着用你的,但我也有一些錯誤 – Ronnie 2011-01-08 20:50:28

回答

1

我想你是非常接近。由於具有對分組結果集進行操作,儘量

HAVING COUNT(price) IN 

HAVING COUNT(price) = 

替換當前行。

+0

我搞砸了,得到了同樣的東西。儘管謝謝! – Ronnie 2011-01-08 20:06:17

-1

你可以嘗試像

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

我不知道甲骨文限制的結果,在SQL Server的頂部,也許你應該使用限制。

0

由於您所標記的問題如Oracle,你可以使用windowing functions到同一個查詢中得到彙總和詳細數據。

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