2017-06-05 15 views
0

サブカテゴリでデータを集計しようとしていますが、全体のカテゴリ数を降順で並べ替える必要がありますか?例えばサブカテゴリごとに集計し、SQLでカテゴリ別に並べ替え

、私の列ヘッダーは次のとおりです。

tbl (table name) 
singularity_id (key) 
product_cat (category) 
consumption_location (sub-category) 

私のSQLクエリは次のとおりです。

SELECT 
    product_cat, consumption_location, COUNT(DISTINCT singularity_id) as count 
FROM 
    tbl 
GROUP BY 
    product_cat, consumption_location 
ORDER BY 
    product_cat, consumption_location, count DESC; 

このグループはproduct_catとconsumption_locationが、product_catカウントDESCで注文していません。

だから私のデータは、現在、私のクエリに基づいて、次のようになります。

私は何をしたいことはある
product_cat | consumption_location | count 
------------+----------------------+-------- 
Fruit Juice | Store    | 200 
Fruit Juice | Home     | 600 
Soft Drink | Store    | 1200 
Soft Drink | Home     | 100 
Water  | Store    | 400 
Water  | Home     | 500 

product_cat | consumption_location | count 
------------+----------------------+-------- 
Soft Drink | Store    | 1200 
Soft Drink | Home     | 100 
Water  | Store    | 400 
Water  | Home     | 500 
Fruit Juice | Store    | 200 
Fruit Juice | Home     | 600 

ソフトドリンクは、水に続いて、最も総合的なエントリを持っているので、その後のフルーツジュース。あなたは「総」

SELECT 
product_cat, consumption_location, COUNT(DISTINCT singularity_id) as count, 
count(*) over (partition by product_cat) as total 
FROM 
tbl 
GROUP BY 
product_cat, consumption_location 
ORDER BY 
total Desc, product_cat, consumption_location 

ためでパーティションの数に追加することができますが、あなたはselect文から完全に合計を除外し、それを追加することができ、一時テーブルなし

+0

期待どおりの出力を期待通りに表示できますか? –

+0

あなたが参照している数は、product_catの数ではなく、singularity_idの数です。 COUNT(product_cat)などのselect文でcount2として別のcount列を追加してから、order by句にcount2を追加してみてください。何が起こるか教えてください – Yoav24

+0

@TimBiegeleisen 私のデータは現在、私のクエリに基づいてこのようになります: product_cat |消費地|カウント ----- | ----- | ----- フルーツジュース|ストア| 200 フルーツジュース|ホーム| 600 ソフトドリンク|ストア| 1200 ソフトドリンク|ホーム| 100 水|ストア| 400 水|ホーム| 500 私が欲しいものは: product_cat |消費地|カウント ----- | ----- | ----- ソフトドリンク|ストア| 1200 ソフトドリンク|ホーム| 100 水|ストア| 400 水|ホーム| 500 フルーツジュース|ストア| 200 フルーツジュース|ホーム| 600 ソフトドリンクには最も多くのエントリがあり、その後に水、フルーツジュースが続きます。 – Jan

答えて

0
with temptbl as 
    (select distinct product_cat, consumption_location, 
     count(SINGULARITY_ID) over (partition by product_cat) cntcat , 
     count(SINGULARITY_ID) over (partition by 
     product_cat,consumption_location) as cntsub 
    from t2 order by cntcat desc 
    ) 
select product_cat ,consumption_location , cntsub from temptbl ; 
0

それはこれは私がわからないのに、あなたは常に一番上に店舗を持っているなぜあなたはあなたのサンプルに必要なものを取得する必要があり、集約

SELECT 
product_cat, consumption_location, COUNT(DISTINCT singularity_id) as count 
FROM 
tbl 
GROUP BY 
product_cat, consumption_location 
ORDER BY 
count(*) over (partition by product_cat) Desc, consumption_location 

だから順。だから私はこれらの2つだけで注文している他のフィールドはあなたの例では重要ではないようですが、最終的な合計が消費された場所は総額の後に昇ると思われます

関連する問題