SQL减法

时间:2015-02-20 02:37:06

标签: sql

我有两张桌子:

Teams (Name, Team ID, Max Size)
Members (Name, Team ID)

我需要弄清楚每个团队可用的插槽数量。我得到的最接近的是计算Name中的出现次数并在Team ID表中按Members进行分组,但之后我不知道如何通过count_of_Name减去Max Size。我知道这是一个基本的问题,但我向你保证,我已经工作并研究了这个问题超过一个小时。提前谢谢。

3 个答案:

答案 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