MySQL group by select 同时聚合和一条特定记录

MySQL group by select aggregate and one particular record at the same time

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

试试这个查询:

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 的组合将此临时 table 连接到原始查询中的 table。 =17=]

注:

可能 可以通过假设 MySQL 仅 return [=15] 的第一行来大大简化查询=] 默认情况下。 q.v。 this SO post。但我会避免在生产中这样做,因为你永远不知道它可能在何时何地不受支持。