sqlite3:计数和;除了没有按预期工作
我对SQL相当陌生,但在互联网上搜索了这个问题的答案后,我仍然无法获得我的COUNT和EXCEPT语句来选择我想要的内容 我的数据库: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
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;