选择每个城市薪水最高的人

时间:2015-01-08 21:57:24

标签: sql sql-server tsql

enter image description here

使用此模型描述的数据库,我需要显示包含以下列的表:

  

cities.name | persons.first_name +'space'+ persons.last_name AS [幸运   男人] |职业。薪水[最佳薪水]

这是一个棘手的问题,因为实体“城市”和“职业”之间没有直接联系。

@UPDATE

不,这不是作业。我能给出的最接近的答案是:

SELECT cP.name, p.first_name+' '+p.last_name AS [The lucky man], T.[MAX] FROM cities cP
    JOIN persons p ON (p.id_city=cP.id_city)
    JOIN occupations o ON (p.id_persons=o.id_person)
    JOIN (SELECT MAX(ow.salary) AS [MAX], ow.id_person AS [idperson] FROM occupations ow GROUP BY ow.id_person) T ON (p.id_persons=T.[idperson])

Maybie这个问题只是令人困惑而不是棘手。

1 个答案:

答案 0 :(得分:3)

编辑 - 感谢您发布到目前为止您已尝试过的内容。问题是,在选择最大值时,您也按人分组。仅在按城市分组时必须选择最大值,然后必须将这些值(城市和最高工资)连接回原始表格。

在旁注中,在下面的查询中,如果要显示没有人的城市,则内联视图/子查询的连接应该是外连接(技术上最高工资为零)。

select  c.name,
        p.first_name+'space'+p.last_name AS [THE LUCKY MAN],
        o.salary [the best salary]
from    persons p
   join cities c
     on p.id_city = c.id_sity
   join occupations o
     on p.id_person = o.id_person 
   join   ( select   p.id_city,
                     max(o.salary) as city_highest
            from     persons p
                join occupations o
                  on p.id_person = o.id_person
            group by p.id_city
          ) v
     on p.id_city = v.id_city
    and o.salary = v.city_highest