我有查询,它将第1列和第2列分组并计算第3列的计数
(select col1, col2, count(col3)
from table1
group by col1,col2
Having count(col3) < 50)
但我想显示col3的所有字段值,其中count(col3)&lt; 50。你能帮帮我吗?谢谢
答案 0 :(得分:0)
试试这个:
select col1, col2, col3, t.cnt
from (
select col1, col2, col3,
count(col3) over (partition by col1, col2) AS cnt
from table1 ) as t
where t.cnt < 50
我们的想法是使用COUNT
的窗口版本而不是GROUP BY
。 COUNT(col3) OVER (PARTITION BY col1, col2)
会为col3
的每一行返回col1, col2
的table1
次出现次数。您可以在外部查询中过滤掉计数为50或更多的col1, col2
个切片。
答案 1 :(得分:0)
您也可以使用以下内容:
select t.col1, t.col2, t.col3
from table1 t
where
EXITS(select 1 from table1 t1 where t.col1 = t1.col1 and t.col2 = t.col2 having count(t1.col3) > 50)
或类似的东西:
select t.col1, t.col2, t.col3
from table1 t
inner join (select t1.col1, t1.col2, count(t1.col3) from table1 t1
group by t1.col1, t1.col2 having count(t1.col3) > 50) x
on t.col1 = x.col1 and t.col2 = x.col2