全部成交
这是正确的代码
SELECT MAX(inflation_rate) AS max_inf FROM ( SELECT name, continent, inflation_rate FROM countries INNER JOIN economies USING (code) WHERE year = 2015) AS subquery GROUP BY continent;
这是错误的代码
SELECT MAX(subquery.economies.inflation_rate) AS max_inf FROM (SELECT countries.name, countries.continent, economies.inflation_rate FROM countries INNER JOIN economies ON countries.code = economies.code WHERE economies.year = 2015) AS subquery GROUP BY subquery.countries.continent;
为什么不允许第二个?
最佳答案
SELECT
MAX(subquery.economies.inflation_rate) AS max_inf -- 3
FROM (
SELECT
countries.name, -- 1
countries.continent,
economies.inflation_rate
FROM ...) AS subquery -- 2
GROUP BY
subquery.countries.continent; -- 3
您正在使用子查询 (2)。此子查询返回三列:名称
、大陆
、inflation_rate
(1)。只有这些名称在子查询之外是已知的,而其他的则一无所知。因此,上级查询不知道列名从何而来。表或表模式是不相关的。
因此,对于上级查询,唯一相关的信息是:子查询的名称和列名称 (3):
SELECT
MAX(subquery.inflation_rate) AS max_inf -- change
FROM (
SELECT
countries.name,
countries.continent,
economies.inflation_rate
FROM ...) AS subquery
GROUP BY
subquery.continent; -- change
关于SQL子查询和列命名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269748/