添加2列和2列的常量之间的SQL差异

时间:2018-02-15 16:39:46

标签: mysql sql

我在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

我只是想知道其中的区别。

谢谢:)

1 个答案:

答案 0 :(得分:4)

第二个版本不是有效的SQL,不应在任何数据库中使用。由于MySQL中的功能不正确,聚合查询中允许使用“裸”列。

您应该设置数据库的配置,以便设置ONLY_FULL_GROUP_BY(请参阅here)。这样,MySQL将符合标准SQL和几乎所有其他数据库。

有什么区别?第一个版本对具有相同director的所有行的值求和。第二个版本返回该导演的任意行的总和。