在通过子查询创建的列表中查找值

时间:2017-11-09 17:45:34

标签: sql tsql subquery aggregate-functions where-in

谢谢Stack-Community,

这对大多数人来说可能是显而易见的,但我不理解为什么它不起作用。

我正在使用Northwind数据库并且假设我试图找到两次或两次不会出现但被列出的频率超过两次或更少的国家/地区。

我已经找到了使用having语句的其他方法,所以我不是在寻找替代方案,而是试图理解为什么我的初始尝试不起作用。

我看着它,看着它,这对我来说非常有意义。有人能解释一下这个问题是什么吗?

SELECT  country, count(country)
FROM Customers
WHERE 2 not in (SELECT count(country) FROM Customers GROUP BY country) 
GROUP BY country
;

1 个答案:

答案 0 :(得分:1)

您需要相关子查询:

SELECT  country, count(country)
FROM Customers c
WHERE 2 not in (SELECT count(country) FROM Customers c2 
                WHERE c2.country = c.country ) 
GROUP BY country;

否则你得到类似的东西:

SELECT  country, count(country)
FROM Customers c
WHERE 2 not in (1,2,3) -- false in every case and empty resultset
GROUP BY country;

想象一下,你有:

1, 'UK'    -- 1
2, 'DE'    -- 2
3, 'DE'
4, 'RU'    -- 1

现在你将获得相同的

SELECT  country, count(country)
FROM Customers c
WHERE 2 not in (1,2,1) -- false in every case and empty resultset
GROUP BY country;

 -- 0 rows selected