在尝试学习MySQL时,我一直在解决Hackerrank的问题。我被this problem卡住了,问道:
" [...]找到表格中CITY条目总数与表格中不同CITY条目数量之间的差异。"
想法是输出单个答案N' - N
。
架构如下所示:
为此,我尝试的查询是:
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上查找了其他问题,但他们没有返回单个号码。
谢谢。
答案 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