如何用BigQuery SQL统计仅今年售出的产品数量(不使用NOT IN/join)
统计仅今年售出产品数量的BigQuery SQL实现(无需NOT IN/JOIN)
当然可以,用聚合分组的方式就能实现需求,完全不需要依赖NOT IN或者JOIN语句。以下是两种可行的写法:
方法一:通过MIN/MAX判断年份唯一性
利用MIN()和MAX()函数,判断某个产品的所有销售年份的最小值和最大值都等于今年,说明该产品只在今年有销售记录:
SELECT COUNT(DISTINCT Product) AS only_this_year_product_count FROM your_table_name GROUP BY Product HAVING MIN(Year) = EXTRACT(YEAR FROM CURRENT_DATE()) AND MAX(Year) = EXTRACT(YEAR FROM CURRENT_DATE())
方法二:统计不同年份数量
先分组统计每个产品涉及的不同年份数量,筛选出仅含1个年份且该年份为今年的产品,再统计总数:
SELECT COUNT(Product) AS only_this_year_product_count FROM ( SELECT Product FROM your_table_name GROUP BY Product HAVING COUNT(DISTINCT Year) = 1 AND MAX(Year) = EXTRACT(YEAR FROM CURRENT_DATE()) )
逻辑验证(针对你的示例数据)
对示例数据分组后:
- 产品A:仅2022年有记录,满足条件;
- 产品B:涉及2021、2022两个年份,不满足;
- 产品C:仅2021年有记录,不满足;
最终统计结果为1,符合预期。
内容的提问来源于stack exchange,提问作者Skylar
相关产品推荐
相关产品推荐

