【问题标题】:MySQL subquery, alias, calculation from table joining queryMySQL子查询,别名,从表连接查询计算
【发布时间】:2018-07-28 20:25:24
【问题描述】:

这里对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),一个年龄范围(年龄) -显示在 case 语句中,以及一个系数,用于查询开始时的计算。 pop_proj 表提供了年份、年龄和人口总数(pop_total 列)。我正在尝试使用 temp_pop 作为子查询的别名。我很确定这个案子写得正确。但是,当我运行查询时,它告诉我: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 'mysql> SELECT round(sum(temp_pop.pop_total * statistics.coefficient)) as deman' 附近使用

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

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

【问题讨论】:

    标签: mysql join subquery case alias


    【解决方案1】:

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

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

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

    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
    ;
    

    【讨论】:

    • 我刚刚意识到我需要添加“as pop_total”来声明那部分,所以你是对的。它现在正在做。非常感谢!
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多