mysql子查询,别名,从表连接查询计算

6ie5vjzr  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(367)

对我来说很新鲜 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 有一张table叫“ demographics “只有三列显示 education level (educational attainment) ,一个年龄范围(age)-显示在case语句中,一个系数,用于查询开始时的计算。pop\u proj表提供了年份、年龄和人口总数(pop\u total列)。我正在尝试使用temp\u pop作为子查询的别名。我很肯定这个案子写得对。但是,当我运行查询时,它告诉我:您的sql语法有错误;请查看与您的mysql服务器版本对应的手册,以了解在第1行“mysql>select round(sum(temp\u pop.pop\u total*demographics.coefficient))as deman”附近使用的正确语法
我还想把结果按年份和受教育程度分组,我只是还没有在里面加上。
以前我只写了一点点不同,它告诉我,它不承认的列名pop\u总,但还没有得到一个没有错误的结果。我可能完全不知道如何写这个查询,但希望我接近。我会很感激你的帮助!提前谢谢!

von4xj4u

von4xj4u1#

很难理解你真正想要的是什么,但这可能会让你更进一步。
下面的假设是 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
;

相关问题