2016-12-21 11 views
0

私はPCのテーブルを持っており、トップPCメーカーの数を取得したいと考えています。データは円グラフで表示され、現在〜45種類のメーカーがありますので、トップ5のカウントを取得してから、「その他」にすべてを組み合わせてください。TOP 5をカウントし、「その他」と数えてください

次のクエリでは、メーカーがすべてのPCの数を返します。上記のクエリの

SELECT 
    f_assetmanufacturer, 
    COUNT(*) as 'PCs' 
FROM tb_assets 
GROUP BY f_assetmanufacturer 

サンプル出力は次のように

f_assetmanufacturer PCs 
----------------------------- 
Dell     100 
HP      50 
Lenovo     25 
Acer     24 
Toshiba    23 
Microsoft    20 
Equus     20 
Thinix     20 
Advantech    20 

所望の出力は次のようになります。

f_assetmanufacturer PCs     f_assetmanufacturer PCs 
-----------------------------    ----------------------------- 
Dell     100     Dell     100 
HP      50     Other     100 
Lenovo     25   or  HP      50 
Acer     24     Lenovo     25  
Toshiba    23     Acer     24 
Other     100     Toshiba    23 

トップ5メーカーのみを選択し、残りのすべての製造業者を '円グラフで出力を簡素化するために「その他」のカテゴリを使用しますか?

+0

トップ5を表示し、残りをアプリケーションレイヤーに集約するだけでなく、ほとんどのチャート機能ではこれを使用して、上位NパーセントまたはNトップアイテムを表示し、残りをロールアップできます。 – scsimon

+0

SQLソリューションが簡潔/明確/容易/効率的でない場合、私はこれを最も確実に行うことができます。しかし私はこれを行うチャーティング機能を持っておらず、SQLソリューションよりもオーバーヘッドを増やす可能性があるカスタムを作成する必要があります。 – Beems

答えて

1

あなたは以下のように一緒に二組と労働組合のデータを構築するためにCTEを使用することができます

with top5 
as (
SELECT top 5 
    f_assetmanufacturer, 
    COUNT(*) as 'PCs' 
FROM tb_assets 
GROUP BY f_assetmanufacturer 
order by 2 desc) 
,other 
as(
select 'Other', 
    COUNT(*) as 'PCs' 
FROM tb_assets a 
where not exists (select 'ne' from top5 t where a.f_assetmanufacturer = t.f_assetmanufacturer))) 

select * from top5 
union all 
select * from other 
4

あなたが集約2つのレベルでこれを行うことができます。

SELECT (CASE WHEN seqnum <= 5 THEN f_assetmanufacturer ELSE 'Other' END) as assetmanufacturer, 
     SUM(PCs) as PCs 
FROM (SELECT f_assetmanufacturer, COUNT(*) as PCs, 
      ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as seqnum 
     FROM tb_assets 
     GROUP BY f_assetmanufacturer 
    ) a 
GROUP BY (CASE WHEN seqnum <= 5 THEN f_assetmanufacturer ELSE 'Other' END) 
ORDER BY PCs DESC; 

注:あなたが欲しいかもしれませんrank()またはdense_rank()を使用してください。これは、「5位」のタイをどのように処理するかによって異なります。

+0

これは非常に明確で簡潔です。ありがとうございます。私はこれに遠く離れた場所でさえも何も考慮しなかった。 – Beems

+0

非常に賢明な関係の問題を提起する。 +1だけ –

関連する問題