Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite3:计数和;除了没有按预期工作_Sql_Database_Sqlite - Fatal编程技术网

sqlite3:计数和;除了没有按预期工作

sqlite3:计数和;除了没有按预期工作,sql,database,sqlite,Sql,Database,Sqlite,我对SQL相当陌生,但在互联网上搜索了这个问题的答案后,我仍然无法获得我的COUNT和EXCEPT语句来选择我想要的内容 我的数据库: sqlite> CREATE TABLE Football(Team TEXT, Player TEXT, Age INTEGER, primary key(Team, Player)); sqlite> .separator , sqlite> .import databaseTest Football sqlite> .headers

我对SQL相当陌生,但在互联网上搜索了这个问题的答案后,我仍然无法获得我的COUNT和EXCEPT语句来选择我想要的内容

我的数据库:

sqlite> CREATE TABLE Football(Team TEXT, Player TEXT, Age INTEGER, primary key(Team, Player));
sqlite> .separator ,
sqlite> .import databaseTest Football
sqlite> .headers on
sqlite> .mode col
sqlite> SELECT Team, Player, Age FROM Football ORDER BY Team;
Team        Player      Age       
----------  ----------  ----------
Arsenal     Cech        38        
Arsenal     Giroud      29        
Arsenal     Sanchez     28        
Arsenal     Walcott     27        
Chelsea     Costa       29        
Chelsea     Courtois    25        
Chelsea     Hazard      26        
Chelsea     Willian     26        
Liverpool   Can         23        
Liverpool   Coutinho    24        
Liverpool   Wjinaldum   25        
Liverpool   Woodburn    17        
Manchester  Aguero      29        
Manchester  Jesus       19        
Manchester  Silva       28        
Manchester  Toure       34        
Manchester  De Gea      26        
Manchester  Felliani    29        
Manchester  Rooney      32        
Manchester  Schweinste  35        
Tottenham   Delle Ali   22        
Tottenham   Kane        24        
Tottenham   Rose        24        
Tottenham   Vertonghen  27   
我想做的是
选择
没有30岁以上球员的球队的
计数。所以选择声明应该是3(切尔西、利物浦、托特纳姆)

这是我尝试过并假设会起作用的声明:

sqlite> SELECT COUNT(DISTINCT Team) FROM Football
...> EXCEPT 
...> SELECT COUNT(DISTINCT Team) FROM Football WHERE Age > 30;
COUNT(DISTINCT Team)
--------------------
6     

但正如您所看到的,它返回“6”。我做错了什么?如何才能得到正确的结果

还有另一种方法。查看每个团队的最大年龄:

SELECT COUNT(*)
FROM (SELECT Team
      FROM Football
      GROUP BY Team
      HAVING MAX(Age) <= 30
     ) t;

严格来说,此查询可以使用
COUNT(*)
而不是
COUNT(DISTINCT)
。但是,要记住,
EXCEPT
(如
UNION
)会删除重复的值,这可能会很麻烦。

非常感谢!事实上,使用“拥有”会更有意义。我以前看过使用have,但在网上搜索时,找不到任何特别好的信息。再次感谢。
SELECT COUNT(DISTINCT TEAM)
FROM (SELECT Team FROM Football
      EXCEPT 
      SELECT Team FROM Football WHERE Age > 30
     ) t;