没有group by的SQL语句

时间:2013-12-06 03:12:47

标签: sql

如果我想在不使用group by的情况下查找表中出现两次以上的所有值,我该怎么做?我知道怎么用group by来做这个,并且很好奇如何在没有分组的情况下通过(编辑:你能加入吗?)

例如,如果我在某个邮政编码中有姓氏,并且我想找到这个姓氏超过两次的条目,那么在SQL语句中如何在没有group by的情况下执行此操作?

我试过

select name, count() from population order by name asc having count() > 2;

但这不符合我的要求。有什么建议吗?

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