【问题标题】:How to join few table and connect id with name column from another table如何加入几个表并将id与另一个表中的名称列连接
【发布时间】:2020-02-28 15:55:12
【问题描述】:

我有以下列名的表格:

玩家:

id first_name last_name 年龄 职位 薪水 雇用日期 技能_data_id 团队 ID

技能:

id, dribbling, pace, passing, shooting, speed, strength

城镇:

id, name, country_id

团队:

 id name    established fan_base    stadium_id

在这个基地上,我找到了他们所在的城镇中速度最快的玩家。

同时,我必须跳过在“Devify”团队中打球的球员。

目前我已尝试使用此代码,但最终结果不正确。

select max(s.speed) as `max_speed`,tt.name as `town_name`
from skills_data as s
right join players as p on s.id = p.skills_data_id
inner join teams as t on p.team_id = t.id
inner join towns as tt on  p.team_id = tt.id
where t.name not like 'Devify'
group by s.id
order by max(s.speed) desc, town_name;

结果应该是这样的:

max_speed   town_name
97          Smolensk
92          Bromma
92          Lühua
...
NULL       Zavolzh’ye

我的结果是:

max_speed   town_name
97          Montréal-Ouest
92          Dalubian
92          Samsan

提前谢谢你。

【问题讨论】:

标签: sql join group-by


【解决方案1】:

您的group by 子句中有一个问题:您应该按城镇而不是技能ID 分组。

我也对引入towns 的连接条件持怀疑态度(请参阅我在您的问题下的评论):但如果您正在为现有查询获得结果,那一定是正确的......

您的查询的其他更改:

  • 将您的 right join 更改为 inner join

  • 使用了更有意义的表别名

  • 使用不等式条件而不是 not like 来排除不受欢迎的团队

新查询:

select 
    max(sk.speed) as max_speed,
    to.name as `town_name`
from skills_data as sk
inner join players as pl on sk.id = pl.skills_data_id
inner join teams   as te on pl.team_id = te.id and te.name <> 'Devify'
inner join towns   as to on pl.team_id = to.id 
group by to.id, to.name
order by max_speed desc, town_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多