PostgreSQL如何查询在指定多个年份均有销售记录的销售员
实现方案
不用写复杂的多表关联或者嵌套查询,用基础的分组聚合就能搞定,核心逻辑是筛选出在3个目标年份都有不重复记录的销售员。
参考SQL语句
假设存储销售记录的表名为sales,存储年份的字段为year,存储销售员名称的字段为salesmen,语句如下:
SELECT salesmen FROM sales WHERE year IN (1998, 1999, 2001) GROUP BY salesmen HAVING COUNT(DISTINCT year) = 3;
语句说明
- 首先用
WHERE year IN (1998, 1999, 2001)过滤掉所有非目标年份的无效记录,减少后续计算的数据量 - 按销售员维度分组后,通过
COUNT(DISTINCT year)统计每个销售员在目标年份范围内,实际产生过销售记录的去重年份总数——这里必须加DISTINCT,避免同一年同个销售员有多条销售记录时导致计数错误,比如示例数据里1998年销售员a有2条记录,不去重的话计数会虚高 - 最后用
HAVING子句筛选出去重年份数等于3的销售员,就是三个目标年份都有销售记录的结果。
拿给出的示例数据跑这段语句,返回的结果正好是销售员a和b,完全符合预期。如果后续需要调整目标统计年份,只需要修改IN里的年份列表、把HAVING后的等号数值改成目标年份的总数量就行,维护成本很低。
内容的提问来源于stack exchange,提问作者Zaur Tskhvaradze
相关产品推荐
相关产品推荐

