如何用DAX计算Top5城市的企业占比及其他城市汇总占比?
计算Top5城市企业占比及其余城市汇总占比
假设你的数据表名为firms,包含firm_name(企业名称)和city(城市)两个字段,以下SQL语句可实现需求:
WITH city_firm_counts AS ( -- 统计各城市企业数及总企业数 SELECT city, COUNT(firm_name) AS firm_count, SUM(COUNT(firm_name)) OVER () AS total_firms FROM firms GROUP BY city ), city_ranked AS ( -- 计算城市企业占比并按企业数降序排名 SELECT city, ROUND((firm_count::FLOAT / total_firms) * 100, 0) AS firms_percent, ROW_NUMBER() OVER (ORDER BY firm_count DESC) AS rank FROM city_firm_counts ) -- 合并排名5以外的城市为others,汇总占比并排序 SELECT CASE WHEN rank <= 5 THEN city ELSE 'others' END AS city, SUM(firms_percent) AS "firms %" FROM city_ranked GROUP BY CASE WHEN rank <= 5 THEN city ELSE 'others' END ORDER BY CASE WHEN city = 'others' THEN 6 ELSE rank END;
逻辑说明
city_firm_countsCTE:统计每个城市的企业数量,同时用窗口函数计算全表企业总数。city_rankedCTE:基于前序结果计算各城市企业占比(保留整数),并按企业数量对城市降序排名。- 最终查询:保留排名前5的城市名称,其余城市合并为
others并汇总占比,最后按排名排序(others排在末尾)。
示例结果
| city | firms % |
|---|---|
| ny | 25 |
| ca | 20 |
| fl | 15 |
| az | 12 |
| others | 28 |
内容的提问来源于stack exchange,提问作者ZO-1907
相关产品推荐
相关产品推荐

