使用此模型描述的数据库,我需要显示包含以下列的表:
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这个问题只是令人困惑而不是棘手。
答案 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