2

私は現在このクエリを持っており、降順で上位の「ピックアップの数」を選択します。ただし、上位10行/最大数のみをフィルタリングする必要があります。これどうやってするの?

一番下に「WHEREROWNUM<=10」を追加しようとしましたが、役に立ちませんでした。

SELECT customer.company_name, COUNT (item.pickup_reference) as "Number of Pickups" 
FROM customer
JOIN item ON (customer.reference_no=item.pickup_reference) 
GROUP BY customer.company_name, item.pickup_reference
ORDER BY COUNT (customer.company_name) DESC;

助けてくれてありがとう!

4

2 に答える 2

3

rownumを機能させるには、サブクエリを実行する必要があります。

SELECT *
FROM
(
SELECT customer.company_name, COUNT (item.pickup_reference) as "Number of Pickups" 
FROM customer
JOIN item ON (customer.reference_no=item.pickup_reference) 
GROUP BY customer.company_name, item.pickup_reference
ORDER BY COUNT (customer.company_name) DESC
) 
WHERE rownum <= 10

代わりにランキング関数を使用することもできますが、これは比較的単純なので、使用するかどうかはわかりません。

于 2012-11-08T13:45:35.280 に答える
1

ランクを使用することによる解決策は次のようなものです:

select customer.company_name, COUNT (item.pickup_reference) from (
    select distinct customer.company_name, COUNT (item.pickup_reference) ,
    rank() over ( order by count(item.pickup_reference) desc) rnk 
    from customer
    JOIN item ON (customer.reference_no=item.pickup_reference) 
    group by customer.company_name, item.pickup_reference
    order by COUNT (customer.company_name) )
where rnk < 10

'rownum'を使用して最上位の結果を取得しても、期待される結果は得られません。これは、順序付けされていない最初の10行を取得してから、それらを並べ替えるためです(Andrewの応答に関するコメントでこれを通知してください、私は持っていませんコメントを追加する権利)。

于 2014-04-14T14:03:32.560 に答える