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-NAME
、JOB-TITLE
、WORKSITE_CITY
和 WORKSITE_STATE
的组合将此临时 table 连接到原始查询中的 table。 =17=]
注:
您 可能 可以通过假设 MySQL 仅 return [=15] 的第一行来大大简化查询=] 默认情况下。 q.v。 this SO post。但我会避免在生产中这样做,因为你永远不知道它可能在何时何地不受支持。
此 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-NAME
、JOB-TITLE
、WORKSITE_CITY
和 WORKSITE_STATE
的组合将此临时 table 连接到原始查询中的 table。 =17=]
注:
您 可能 可以通过假设 MySQL 仅 return [=15] 的第一行来大大简化查询=] 默认情况下。 q.v。 this SO post。但我会避免在生产中这样做,因为你永远不知道它可能在何时何地不受支持。