SQL解题分析与代码解读
题目背景
本题目要求我们从Customers
表中查询2021年具有正收入的客户。Customers
表包含了客户ID、年份和收入三个字段,其中(customer_id, year)
组合作为表的主键,保证了唯一性。需要注意的是,客户的收入可能为负数。
题目要求
- 查询2021年收入为正数的客户ID。
- 结果可以按任意顺序返回。
解决方案分析
方案一
SELECT
customer_id
FROM
Customers
WHERE
revenue > 0 AND year = 2021
;
解释:
- 选择字段:本查询选择了
customer_id
字段。 - 条件筛选:
WHERE
子句用于筛选数据。revenue > 0
确保只选取收入为正的记录。year = 2021
确保选取的是2021年的数据。
- 结果:此查询返回所有在2021年有正收入的客户ID。
方案二
SELECT
customer_id
FROM
Customers
WHERE
year = 2021
GROUP BY customer_id, year
HAVING
sum(revenue) > 0
;
解释:
- 选择字段:选取
customer_id
字段。 - 条件筛选:
WHERE
子句筛选2021年的记录。GROUP BY customer_id, year
将数据按客户ID和年份分组。
- 分组聚合:
HAVING sum(revenue) > 0
是对分组后的数据进行过滤。sum(revenue)
计算每个分组(即每个客户在2021年的)总收入。- 只选择总收入为正的客户ID。
- 结果:此查询返回所有在2021年总收入为正的客户ID。
结论
两种方案都能有效解决问题,但在处理数据时略有不同。第一种方法直接筛选出2021年收入为正的记录,而第二种方法则是先按客户ID和年份分组,再计算每个分组的总收入,最后筛选出总收入为正的客户ID。选择哪种方法取决于具体的数据情况和性能考虑。