PostgreSQL中使用DISTINCT ON时如何返回各区域客户数量?
为PostgreSQL的DISTINCT ON查询添加区域客户数量统计
原查询通过DISTINCT ON (region)配合排序逻辑,能精准获取每个区域消费最高的顶级客户。要给结果加上各区域的客户总数,不需要额外做GROUP BY或者子查询关联,用PostgreSQL的窗口函数就能直接实现,且效率更高。
修改后的完整查询语句:
-- 获取各区域顶级客户及对应区域客户总数 SELECT DISTINCT ON (region) *, COUNT(*) OVER (PARTITION BY region) AS region_customer_count FROM customers ORDER BY region, total_purchases DESC;
关键说明:
COUNT(*) OVER (PARTITION BY region):这个窗口函数会以region为分组依据,计算每个区域内的客户总数,然后把这个统计值附加到该区域的每一行数据上。- 结合
DISTINCT ON (region)的逻辑,最终结果里每个区域只会保留消费最高的那一条客户数据,同时带上该区域的总客户数,完全符合需求。
如果后续有过滤条件(比如只统计活跃客户),只需要在FROM子句后添加WHERE条件即可,窗口函数会自动基于过滤后的数据集计算统计值。
内容的提问来源于stack exchange,提问作者bertday
相关产品推荐
相关产品推荐

