如果我想在不使用group by的情况下查找表中出现两次以上的所有值,我该怎么做?我知道怎么用group by来做这个,并且很好奇如何在没有分组的情况下通过(编辑:你能加入吗?)。
例如,如果我在某个邮政编码中有姓氏,并且我想找到这个姓氏超过两次的条目,那么在SQL语句中如何在没有group by的情况下执行此操作?
我试过
select name, count() from population order by name asc having count() > 2;
但这不符合我的要求。有什么建议吗?
答案 0 :(得分:2)
将此标记为sql
似乎正在寻找一般解决方案。自SQL:2003修订版以来,可以公平地说这可以通过窗口函数来解决:
SELECT name FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) rank,
name
FROM population
) s
WHERE rank = 3
查看示例小提琴here。
无论如何,在没有GROUP BY
的情况下解决这个问题的事实并不意味着它应该:)
答案 1 :(得分:0)
似乎correlated query可以为你效劳。请检查。
假设下面给出的数据集
Id Zip Lastname
--- ----- --------
101 12345 John
102 12345 John
103 12345 John
104 12345 Ram
105 12345 Kelly
106 12345 Kelly
107 45678 Krishna
108 45678 Krishna
109 45678 Krishna
110 45678 David
111 45678 David
查询
select * from test.population pop1
where 2 < (select count(*) from test.population pop2
where pop1.Lastname=pop2.Lastname and pop1.Zipcode = pop2.Zipcode)
以上查询的输出为
Id Zip Lastname
--- ------ --------
101 12345 John
102 12345 John
103 12345 John
107 45678 Krishna
108 45678 Krishna
109 45678 Krishna