在下面的查询中,我试图在每个城市的数据库中找到前2名雇主姓名和员工人数。
它目前正在运作,但我希望它现在将具有相同EmpName的所有雇主相加并将其返回给每个" Jobs"列。
所以我需要修正等级,以便找到按名称分组的最大雇主,然后我需要在select语句中返回该值。如何实现这一目标?
声明:
SELECT DISTINCT GROUP_CONCAT(NAME SEPARATOR ',') as subsets
FROM TABLE_1
GROUP BY PARENT_ID;
以下是一些示例数据:
SELECT
x.City,
MAX(CASE WHEN x.rk = 1 THEN x.EmpName END) AS Top1_Employer,
MAX(CASE WHEN x.rk = 1 THEN x.Employees END) AS Top1_Jobs,
MAX(CASE WHEN x.rk = 2 THEN x.EmpName END) AS Top2_Employer,
MAX(CASE WHEN x.rk = 2 THEN x.Employees END) AS Top2_Jobs
FROM(SELECT emp.*, ROW_NUMBER() OVER(PARTITION BY emp.City ORDER BY
emp.Employees desc) AS rk FROM Employer emp) x
GROUP BY x.City
答案 0 :(得分:1)
您希望对city和empname进行汇总,以根据每个城市中的人员和排名来查找员工总数。然后转动结果。
试试这个:
select City,
MAX(case when rk = 1 then EmpName end) as Top1_Employer,
MAX(case when rk = 1 then Employees end) as Top1_Jobs,
MAX(case when rk = 2 then EmpName end) as Top2_Employer,
MAX(case when rk = 2 then Employees end) as Top2_Jobs,
MAX(case when rk = 3 then EmpName end) as Top3_Employer,
MAX(case when rk = 3 then Employees end) as Top3_Jobs,
MAX(case when rk = 4 then EmpName end) as Top4_Employer,
MAX(case when rk = 4 then Employees end) as Top4_Jobs,
MAX(case when rk = 5 then EmpName end) as Top5_Employer,
MAX(case when rk = 5 then Employees end) as Top5_Jobs
from (
select city,
empname,
sum(Employees) as Employees,
ROW_NUMBER() over (
partition by emp.City order by sum(Employees) desc
) as rk
from Employer emp
group by City,
empname
) x
group by City