我想知道sql中是否存在“select distinct”的相反情况,这样我就可以用来从只重复多次的表中获取值。
谢谢
答案 0 :(得分:23)
select some_column, count(*)
from some_table
group by 1
having count(*) > 1;
在像mysql这样的数据库上,您甚至可以省略选择count(*)
以保留 列值:
select some_column
from some_table
group by 1
having count(*) > 1;
答案 1 :(得分:7)
您需要group by
having
子句,例如:
select person, count(friends)
from people
group by person
having count(friends) > 1
这会给你一份所有人和他们的朋友数的清单,除了那些只有他们的母亲结识的可怜的悲伤鞋底,或者更糟糕的是,他们的母亲不是甚至 :-)
在这种情况下,您必须使用having
而不是where
,因为前者在分组后进行过滤,而后者在之前进行过滤,并且您没有像{{1这样的集合函数的信息分组后直到。
答案 2 :(得分:1)
我正在为多对多连接情况寻找类似的东西,我希望显示两个表中存在多少重复项。 count(distinct col)并不是正确的解决方案,因为'1'的结果表明该列确实有重复,但没有说多少。我使用的“不同的相反”是使用count(*):(count(*) - count(distinct col)+1)的反转,它完成了工作。