根据分组获取多行

时间:2010-04-22 10:01:36

标签: sql

考虑这个数据

PK field1 field2
1  a      b
2  a      (null)
3  x      y
4  x      z
5  q      w

我需要获取此数据

从field1已计数的所有行中选择所有列> 1

这意味着所需的输出是

PK field1 field2
1  a      b
2  a      (null)
3  x      y
4  x      z

我试过并最终安顿下来

select * from mytable  where field1 in 
(select field1 from mytable group by field1 having count(field1)>1 ) order by field1

但必须有比这更好的方法

2 个答案:

答案 0 :(得分:0)

这就是我这样做的方式。

您可以使用对子查询的连接重写它,而不是使用in,但我怀疑它会更快。

编辑:好的,所以作为参考,“join”方法会是这样的:

select m.* from mytable m 
join (
  select field1 from mytable 
  group by field1 
  having count(field1)>1 
) j on m.field1=j.field1
order by m.field1

似乎值得测试看它是否更快(感谢@binaryLV)。

答案 1 :(得分:0)

另一种方法,如果使用T-SQL

;WITH T AS
(
 SELECT PK, FIELD1, FIELD2, COUNT(FIELD1) OVER(PARTITION BY FIELD1) AS R
)
SELECT PK, FIELD1, FIELD2
FROM T
WHERE R > 1