Mysql - 如何减去2个查询返回的行数

时间:2017-07-03 01:02:37

标签: mysql

在尝试学习MySQL时,我一直在解决Hackerrank的问题。我被this problem卡住了,问道:

  

" [...]找到表格中CITY条目总数与表格中不同CITY条目数量之间的差异。"

想法是输出单个答案N' - N

架构如下所示:

enter image description here

为此,我尝试的查询是:

select count(s2.c2) - count(s1.c1) 
from (select city as c1 from station group by city) as s1, 
(select city as c2 from station) as s2;

我也尝试了许多其他变体,但没有一个能给我正确答案。我哪里错了?我也在SO上查找了其他问题,但他们没有返回单个号码。

谢谢。

2 个答案:

答案 0 :(得分:1)

有不同的方法可以做到这一点。使用你的方向:

select total_cities - count(distinct_cities) 
from (select count(*) as distinct_cities from station group by city) as s1, 
(select count(*) as total_cities from station) as s2
GROUP BY total_cities;

因此,首先将distinct_cities计算为只有一个唯一列表,您还可以使用:

SELECT DISTINCT city AS distinct_cities FROM station

然后通过在外部查询中再次计算来计算不同城市的总数。希望这可以帮助你思考更多(更短)的写作方式。

答案 1 :(得分:1)

只需使用count(distinct),无需使用自我加入,请尝试以下操作:

select
    count(city) - count(distinct city)
from station