0

我有一个国家足球俱乐部的桌子。这些字段是“teamName”、“playerName”和“country”。

我想统计一下所有球员都是外国人的俱乐部

. 我尝试了以下查询,但我认为它不起作用,因为它似乎在我们至少有一个外国人时才算数,但我希望如果一支球队的所有球员都是外国人,它就会算数!

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

请指教。谢谢!

4

3 回答 3

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%')
于 2013-06-17T17:39:33.893 回答
0

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

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

似乎应该有一个更短的答案虽然......

于 2013-06-17T17:54:14.000 回答
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,其中包括该球员当前球队的球队表的外键。这是基本的数据库规范化。但是,用FROM这两个表的连接替换单个表,相同的GROUP BY/HAVING技巧有效。

于 2013-06-17T19:18:25.573 回答