【问题标题】:MySQL group by select aggregate and one particular record at the same timeMySQL group by select聚合和一条特定记录同时
【发布时间】:2015-07-06 04:11:34
【问题描述】:

此表已按 EMPLOYER-NAME、JOB_TITLE、WORKSITE_CITY、WORKSITE_STATE 和 IN_YEAR 分组,计算得出 AVG_ANNUAL_SALARY。

我想在下一个查询中做的是:

select EMPLOYER-NAME, JOB_TITLE, WORKSITE_CITY, WORKSITE_STATE,
    AVG(AVG_ANNUAL_SALARY) AS ANNUAL_SALARY,
    "Most recent year(could be 2015 or 2014 or 2013 or 2012)'s salary"
from table
group by EMPLOYER-NAME, JOB_TITLE, WORKSITE_CITY, WORKSITE_STATE

我是 mysql 新手,有人可以帮我检索双引号中的部分吗? 谢谢!

【问题讨论】:

    标签: mysql database group-by aggregate-functions


    【解决方案1】:

    试试这个查询:

    select t1.EMPLOYER-NAME, t1.JOB_TITLE, t1.WORKSITE_CITY, t1.WORKSITE_STATE,
        AVG(t1.AVG_ANNUAL_SALARY) AS ANNUAL_SALARY, t2.AVG_ANNUAL_SALARY AS MOST_RECENT_SALARY
    from table t1
    group by EMPLOYER-NAME, JOB_TITLE, WORKSITE_CITY, WORKSITE_STATE
    inner join
    (
        select EMPLOYER-NAME, JOB_TITLE, WORKSITE_CITY, WORKSITE_STATE, AVG_ANNUAL_SALARY
        from table r1
        where r1.IN_YEAR = (
            select max(r2.IN_YEAR) from table r2
            where r1.EMPLOYER-NAME = r2.EMPLOYER-NAME and r1.JOB_TITLE = r2.JOB_TITLE
                and r1.WORKSITE_CITY = r2.WORKSITE_CITY
                and r1.WORKSITE_STATE = r2.WORKSITE_STATE
        )
    ) t2
    ON t1.EMPLOYER-NAME = t2.EMPLOYER-NAME and t1.JOB_TITLE = t2.JOB_TITLE
        and t1.WORKSITE_CITY = t2.WORKSITE_CITY and t1.WORKSITE_STATE = t2.WORKSITE_STATE
    

    说明:

    内部查询为每个组查找最近一年的平均年薪。然后通过EMPLOYER-NAMEJOB-TITLEWORKSITE_CITYWORKSITE_STATE 的组合将此临时表连接到原始查询中的表。

    注意:

    可能可以通过假设 MySQL 默认只返回 GROUP BY 的第一行来摆脱一个大大简化的查询。 q.v. this SO post。但我会回避在生产中这样做,因为你永远不知道何时何地它可能不受支持。

    【讨论】:

    • 谢谢@Tim Biegeleisen!你的答案对我有用。
    • 其实你的查询有问题。当我单独运行内部查询时,我发现没有 r2.IN-YEAR 为 NULL 的行。也就是说,2015 年不能出现在 r1.IN-YEAR 列中。你知道为什么会这样吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多