Bee*_*ems 0 t-sql sql-server sql-server-2014
我有一桌电脑,想了解顶级电脑制造商的数量。由于数据将显示在饼图中,并且目前有大约 45 个不同的制造商,因此我想获取前 5 个制造商的数量,然后将其他所有内容合并到“其他”中。
以下查询将返回按制造商列出的所有 PC 的计数:
SELECT
f_assetmanufacturer,
COUNT(*) as 'PCs'
FROM tb_assets
GROUP BY f_assetmanufacturer
Run Code Online (Sandbox Code Playgroud)
上述查询的示例输出为:
f_assetmanufacturer PCs
-----------------------------
Dell 100
HP 50
Lenovo 25
Acer 24
Toshiba 23
Microsoft 20
Equus 20
Thinix 20
Advantech 20
Run Code Online (Sandbox Code Playgroud)
期望的输出如下:
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
Run Code Online (Sandbox Code Playgroud)
如何仅选择前 5 个制造商并将所有剩余制造商合并到“其他”类别中,以简化饼图中的输出?
您可以通过两个级别的聚合来完成此操作:
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;
Run Code Online (Sandbox Code Playgroud)
注意:您可能需要使用rank()或dense_rank(),具体取决于您希望如何处理“第五”位置的关系。
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |