如何计算没有外国球员的球队

时间:2013-06-17 17:37:05

标签: mysql sql

我有一张国家足球俱乐部的桌子。字段是“teamName”,“playerName”和“country”。

  

我想算一下所有球员都是外国人的球杆

。我尝试了以下查询,但我认为它不起作用,因为看起来我们至少有一个外国人,但如果一个团队的所有玩家都是外国人,我想要计算它!

SELECT COUNT(DISTINCT teamName)
FROM teams
WHERE country not like '%England%'

请指教。谢谢!

3 个答案:

答案 0 :(得分:4)

一种方法是:

SELECT COUNT(DISTINCT teamName)
FROM teams T1
WHERE NOT EXISTS 
( select * from teams T2 
  WHERE T1.teamName=T2.teamName and T2.country like '%England%')

答案 1 :(得分:0)

甚至连接似乎都需要一个内部查询:

SELECT COUNT(*) 
FROM (
  SELECT teamName,
    SUM(country like '%England%') AS Locals
  FROM teams
  GROUP BY teamName
) AS t
WHERE Locals = 0;

似乎应该有一个较短的答案......

答案 2 :(得分:0)

快速而肮脏的回答,它只传递一个数据,没有子查询。这选择了所有外国球队。如果那不是你想要的,你可以使用CASE表达式。

SELECT team_name
FROM teams
GROUP BY team_name
HAVING COUNT(country)=
       SUM(CASE country != 'England' WHEN TRUE THEN 1 ELSE 0 END); 

更长的回答:您的架构未正常化,但应该是。您想要teams的表和players第二表,其中包含该球员当前球队的球队表中的外键。这是基本的DB规范化。但是,使用这两个表的连接替换FROM中的单个表,相同的GROUP BY / HAVING技巧可以正常工作。