0

このテーブルを考えると:

オーダー
custName description 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)

しかし、エラーが発生した custname と description 列を表示する必要があります。

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 は GROUP 化された結果セットで動作するため、試してください。

HAVING COUNT(price) IN

また

HAVING COUNT(price) =

現在の行を置き換えます。

于 2011-01-08T20:02:39.717 に答える
0

質問にオラクルのタグを付けたので、ウィンドウ関数を使用して、同じクエリ内で集計データと詳細データを取得できます。

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 に答える