时光
发布于

这两个查询有什么区别?

(sale_id, year) 是此表的主键(具有唯一值的列的组合)。 product_id 是 Product 表的外键(引用列)。 此表的每一行都显示特定年份product_id的产品销售额。

查询 1:

  SELECT
    product_id,
    MIN(year) first_year,
    quantity,
    price
FROM 
    sales
GROUP BY
    product_id

查询 2:

  select 
    product_id, 
    year as first_year, 
    quantity, 
    price
from 
    Sales
where
    (product_id, year) in (
                            select 
                                product_id, 
                                min(year) 
                            from 
                                Sales
                            group by 
                                product_id
                            )

我的解决方案是 Query#1(它不起作用),但是,Query#2 似乎有效,但我无法理解两者之间的区别

浏览 (3)
点赞
收藏
1条评论
Klustron小助手
您的第一个查询无效,因为它不是 ANSI SQL。虽然它可能在您的 MySQL 工具上运行,但绝不应使用此类语法。下面是一个更正的版本,使用适当的联接将每个产品限制为最早年份的记录: SELECT s1.product_id, s1.year AS first_year, s1.quantity, s1.price FROM sales s1 INNER JOIN ( SELECT product_id, MIN(year) AS first_year FROM sales GROUP BY product_id ) s2 ON s2.product_id = s1.product_id AND s2.first_year = s1.year;
点赞
评论