这里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
”,其中只有三列显示education level (educational attainment)
,年龄范围(age)-在case语句中显示,以及一个系数,用于在查询开始时进行计算。 pop_proj表提供了年份,年龄和人口总数(pop_total列)。我正在尝试使用temp_pop作为子查询的别名。我相当确定案件已正确写出。但是,当我运行查询时,它告诉我:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的'mysql> SELECT round(sum(temp_pop.pop_total * demographics.coefficient))作为deman'附近使用
我也想按年份和教育程度对结果进行分组,只是我还没有添加。
以前,我写的内容只是稍有不同,它告诉我它无法识别列名pop_total,但尚未得到结果且没有错误。我可能对如何编写此查询完全不满意,但希望我能快一点。我将不胜感激!提前致谢!
答案 0 :(得分:0)
很难理解您的真正想法,但这可能会使您更接近。
以下假设您仅将CASE中人为设计的年龄范围字符串与demographics
和pop_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
;