MySQL 子查询、别名、来自 table 加入查询的计算

MySQL subquery, alias, calculation from table joining query

这里是 MySQL 的新手。我有以下查询并没有按我想要的方式工作:**SELECT round(sum(temp_pop.pop_total * demographics.coefficient)) as demand, pop_proj.pop_total from pop_proj, d.age, d.coefficient, d.educationalattainment from demographics d JOIN (SELECT year,sum(pop_total), age FROM pop_proj GROUP BY year, age) AS temp_pop WHERE d.age = CASE WHEN temp_pop.age < 18 then '00 to 17' WHEN temp_pop.age > 64 then '65 to 80+' ELSE '18 to 64' end;**

来源是上面显示的语法中的 subquery,我正在尝试 join 一个名为“demographics”的 table 只有三列显示 education level (educational attainment),一个年龄范围 (age) - 在 case 语句中显示,以及一个系数,用于查询开始时的计算。 pop_proj table 提供了年份、年龄和人口总数(pop_total 列)。我正在尝试使用 temp_pop 作为子查询的别名。我很确定案例写得正确。但是,当我 运行 查询时,它告诉我: You have an error in your SQL syntax;查看与您的 MySQL 服务器版本对应的手册,了解在第 1

行 'mysql> SELECT round(sum(temp_pop.pop_total * demographics.coefficient)) as deman' 附近使用的正确语法

我还想按年份和教育程度对结果进行分组,只是我还没有在其中添加。

之前我只写了一点点不同,它告诉我它不识别列名 pop_total,但还没有得到没有错误的结果。我可能完全不知道如何编写此查询,但希望我已经接近了。我会很感激一些帮助!提前致谢!

很难理解您真正追求的是什么,但这可能会让您更近一步。

以下假设您仅在您的 CASE 中人为的年龄范围字符串上将 demographicspop_total 相关联,这是可疑的并且可能无效。

这不会尝试对结果进行分组,但一旦您看到满足您需要的工作详细输出,这应该很简单。

SELECT d.age, d.coefficient, d.educationalattainment, temp_pop.pop_total
FROM demographics d JOIN (
    SELECT `year`, age, sum(pop_total) as pop_total
    FROM pop_proj
    GROUP BY `year`, age
) temp_pop ON d.age = 
    CASE WHEN temp_pop.age < 18 THEN '00 to 17' 
    WHEN temp_pop.age > 64 THEN '65 to 80+' 
    ELSE '18 to 64' END
;