2011-01-08 73 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