我有两张桌子:
Teams (Name, Team ID, Max Size)
Members (Name, Team ID)
我需要弄清楚每个团队可用的插槽数量。我得到的最接近的是计算Name
中的出现次数并在Team ID
表中按Members
进行分组,但之后我不知道如何通过count_of_Name减去Max Size
。我知道这是一个基本的问题,但我向你保证,我已经工作并研究了这个问题超过一个小时。提前谢谢。
答案 0 :(得分:3)
不需要子查询:
select t.[Team ID], t.Name, t.MaxSize - COUNT(m.*) as SpotsLeft
from Teams t
left join Members m on m.[Team ID] = t.[Team ID]
group by t.[Team ID], t.Name, t.MaxSize
答案 1 :(得分:0)
您可以使用子查询实现此目的:
select (select max(count(*))
from teams
join members using(teamId)
group by teamId) - count(members.*) as available_slots
from teams
join members using(teamId);
请注意,如果每个团队的最大可能成员数被修复将会更容易,因为您可以直接减去而不是使用子查询。
答案 2 :(得分:0)
SELECT t.MaxSize - (SELECT COUNT(*)
FROM Members m
WHERE m.team_id = t.team_id)
FROM Teams t
或者,避免(多个)子查询
SELECT t.MaxSize, q.Team_Count
FROM Teams t
LEFT JOIN (SELECT m.Team_ID, COUNT(*) as Team_Count
FROM Members m
GROUP BY m.Team_ID) as q
ON q.Team_ID = t.Team_ID