MySQL组通过选择聚合和一个特定记录同时进行

时间:2015-07-06 04:11:34

标签: mysql database group-by aggregate-functions

Please see my table structure

此表已按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的新手,有人可以帮我检索双引号中的部分吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试此查询:

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的第一行, 可能能够远离简化的查询。剂适量this SO post。但我会回避在制作中这样做,因为你永远不知道它可能不会被支持的时间和地点。