我在SQL上基本上是全新的,希望有一个简单的问题。
我正在阅读sqlbolt教程(https://sqlbolt.com/lesson/select_queries_order_of_execution)并根据以下内容获得了两个截然不同的答案:
SELECT director, SUM(domestic_sales + international_sales)
as Cumulative_sales_from_all_movies
FROM movies
INNER JOIN boxoffice ON movies.id = boxoffice.movie_id
GROUP BY Director
Vs以上。
SELECT director, (domestic_sales + international_sales)
as Cumulative_sales_from_all_movies
FROM movies
INNER JOIN boxoffice ON movies.id = boxoffice.movie_id
GROUP BY Director
我只是想知道其中的区别。
谢谢:)
答案 0 :(得分:4)
第二个版本不是有效的SQL,不应在任何数据库中使用。由于MySQL中的功能不正确,聚合查询中允许使用“裸”列。
您应该设置数据库的配置,以便设置ONLY_FULL_GROUP_BY
(请参阅here)。这样,MySQL将符合标准SQL和几乎所有其他数据库。
有什么区别?第一个版本对具有相同director的所有行的值求和。第二个版本返回该导演的任意行的总和。