0

鉴于此表:

订单
custName 描述 to_char(price)
A desa $14
B desb $14
C desc $21
D desd $65
E dese $21
F desf $78
G desg $14
H desh $21

我试图显示价格出现次数最多的整行,在这种情况下为 14 美元和 21 美元

我相信需要有一个子查询。所以我从这个开始:

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

这给了我3。

一段时间后,我认为这没有帮助。我相信我需要值 14 和 21 而不是计数,所以我可以把它放在 where 子句中。但我不知道如何显示它。有什么帮助吗?

更新:所以我得到它来查询 14 和 21

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

但我需要它来显示我收到错误的客户名称和描述列:

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

有什么帮助吗?

4

4 回答 4

1

我猜你很接近。由于 HAVING 对 GROUPed 结果集进行操作,因此请尝试

HAVING COUNT(price) IN

或者

HAVING COUNT(price) =

替换您当前的行。

于 2011-01-08T20:02:39.717 回答
0

由于您将问题标记为 oracle,因此您可以使用窗口函数在同一查询中获取聚合和详细数据。

SELECT   COUNT (price) OVER (PARTITION BY price) count_at_this_price, 
         o.* 
from orders o 
order by 1 desc
于 2011-01-08T20:09:52.530 回答
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
)
);

参考

于 2011-01-08T20:17:14.927 回答
-1

你可以尝试类似的东西

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

我不确定在 Oracle 中限制结果,在 SQL Server 中是最高的,也许你应该使用限制。

于 2011-01-08T20:03:05.337 回答