2017-07-31 14 views
0

のmax発生して行のフェッチ:コードの場合私のようなテーブル持っているオラクル

SALES 

PROD_CODE SALE_ID 
321   30 
123   67 
321   46 
321   82 
123   48 
321   91 

を:

SELECT PROD_CODE, COUNT(SALE_ID) AS TOTAL_SALES 
FROM SALES 
GROUP BY PROD_CODE 
ORDER BY COUNT(SALE_ID) DESC; 

出力は次のとおりです。私は

PROD_CODE TOTAL_SALES 
321  4 
123  2 

しかし、販売数が最大のprod_codeだけを出力として期待すると、

コードの場合

PROD_CODE 
321 

::のような

SELECT PROD_CODE 
FROM (SELECT MAX(COUNT(SALE_ID)) FROM SALES 
GROUP BY SALE_ID); 

コードが動作していません!オラクル12cは+で

+1

「動作していません」と定義してください。間違いはありますか?間違った結果ですか?また、達成しようとしているものの背後にある論理を説明してください。最も売れ行きのあるコードを見つけようとしているようですね。 – Boneist

+0

また、それぞれ3回販売された2つの商品コードがある場合はどうなりますか?どちらを表示しますか?要件や実際の問題を指定していません。 –

+0

それはどういう意味ですか?販売数が最大のもの - つまり、4 - または最高の 'sales_id'を持っているので321 - ID 91を持つので321ですか?あなたのデータからは曖昧です。 (私は前者を前提としましたが、ゴードンは後者を前提としていたようですので、あなたの質問ではっきりと説明すれば助けになります)。最大販売数であれば、2つの商品が同じ*販売数を持つ場合、どうなりますか? 'total_sales'が4になる2つの商品がありますか? –

答えて

4

、あなたが行うことができます:

以前のバージョンでは
select s.prod_code 
from sales s 
order by count(*) desc 
fetch first 1 row only; 

、どちらか

select s.* 
from (select s.prod_code 
     from sales s 
     order by count(*) desc 
    ) s 
where rownum = 1; 

または:

select max(prod_code) over (dense_rank first order by cnt desc) 
from (select s.prod_code, count(*) as cnt 
     from sales s 
     group by s.prod_code 
    ) s 

を最初の2つのバージョンが行全体を取り込みます。 1つ以上の列に制限することができます。

+2

最高の販売IDではなく、販売数が最も多い製品コードを質問するのは難しいですか? '最大出現'とカウントの使用から?要件は完全に明確ではありません。 (また、3番目の例は 'keep'ではなく' over'ですか?) –

+0

@Gordon私は、最大売り上げ数をもったprod_codeだけを出力(ベストセラー商品のコードネーム)として期待しています。テーブルはそのままで、考慮すべき「実生活」のデータはありません。 – FalconHawk

+0

@AlexPoole。 。 。それは多くの意味があります。 –

関連する問題