从比赛表中查找赛车手计数

  • 本文关键字:赛车手 查找 mysql sql
  • 更新时间 :
  • 英文 :


我是SQL的新手,我有两个表RACER和SPONSOR,赛车手表包含这些列

RACER_NAME,
SPONSOR_ID
RACER_ID- Primary KEY
SPONSOR table has these columns
SPONSOR_ID,
SPONSOR_NAME

现在我想找到与该赞助商关联的赞助商名称和赛车手编号。

这是我尝试过的:

select s.sponsor_name , (select count(*) from racer r) where INNER JOIN s.sponsor_id = r.sponsor_id
你需要

了解JOIN是如何工作的,以及它的语法。

select s.sponsor_name, count(*) as total_racer 
from
racer r inner join sponsor s
on r.sponsor_id=s.sponsor_id
group by r.sponsor_id

您需要在FROM子句中指定这两个表,而您缺少这些表。

您可以使用连接(如果赞助商没有赛车手,则向左连接(并使用分组依据和计数获得结果,而无需子选择。

  select s.sponsor_name ,  count(*) 
  from SPONSOR s r
  left  JOIN  racer r s.sponsor_id = r.sponsor_id
  GROUP BY s.sponsor_name

带有子查询的版本是合理的,特别是因为在MySQL中,它可以比相应的GROUP BY查询具有更好的性能。 但是,它需要是一个相关的子查询。 这看起来像:

select s.*,
       (select count(*)
        from racer r
        where  s.sponsor_id = r.sponsor_id
       ) as cnt
from sponsor s;

换句话说,对于相同的值,请选择 JOIN 方法或子查询方法,但不能同时选择两者。

最新更新