SQL查询筛选为何需同时匹配product_id与首次年份?求解析
为什么筛选时必须同时指定product_id?
我们需要编写SQL查询,选取每个产品首次销售年份的product_id、year、quantity、price,结果可按任意顺序返回。
用户的错误代码(仅在简单测试生效)
SELECT product_id, year AS first_year, quantity, price FROM Sales WHERE year IN ( SELECT MIN(year) as year FROM Sales GROUP BY product_id) ;
正确的查询语句
SELECT product_id, year AS first_year, quantity, price FROM Sales WHERE (product_id, year) IN ( SELECT product_id, MIN(year) as year FROM Sales GROUP BY product_id) ;
问题解答
你的错误写法里,子查询仅返回所有产品的首次年份集合(比如产品A首次是2020年、产品B首次是2021年,子查询结果就是[2020,2021])。外层查询会把所有年份属于这个集合的销售记录都筛选出来——这就可能包含产品B在2020年的销售记录(如果存在的话),但2020年并不是产品B的首次销售年份,最终结果自然出错。
SQL不会自动关联外层的product_id和子查询中的product_id,year IN (...)只是单一的年份匹配,无法确保年份属于对应产品的首次销售时间。只有使用(product_id, year)这种复合条件,才能让每条记录的产品ID和年份,精准匹配到子查询中该产品对应的首次年份组合,这样筛选出来的才是每个产品真正的首次销售记录。
内容的提问来源于stack exchange,提问作者mmmmmm
相关产品推荐
相关产品推荐

