Sql 如何获得唯一行的计数?
我试图得到只相差一条记录的行数,这样我就可以通过确定最频繁出现的组合来找出“历史上”正确的行。这些行将如下所示:Sql 如何获得唯一行的计数?,sql,Sql,我试图得到只相差一条记录的行数,这样我就可以通过确定最频繁出现的组合来找出“历史上”正确的行。这些行将如下所示: RowAVal1 | RowAVal2 | RowAVal3 | DiffVal1 RowAVal1 | RowAVal2 | RowAVal3 | DiffVal1 RowAVal1 | RowAVal2 | RowAVal3 | DiffVal2 RowAVal1 | RowAVal2 | RowBVal1 | DiffVal1 在本例中,对于RowAVal1 | RowAVa
RowAVal1 | RowAVal2 | RowAVal3 | DiffVal1
RowAVal1 | RowAVal2 | RowAVal3 | DiffVal1
RowAVal1 | RowAVal2 | RowAVal3 | DiffVal2
RowAVal1 | RowAVal2 | RowBVal1 | DiffVal1
在本例中,对于RowAVal1 | RowAVal2 | RowAVal3组合,具有DiffVal1的行将是历史上正确的组合,因为它看起来是最正确的组合。我需要弄清楚如何计算这些行。如果我理解正确,您需要前三列组合的第四列的最常用值。这称为统计中的模式,使用聚合和窗口函数很容易计算:
select t.*
from (select col1, col2, col3, col4, count(*) as cnt,
row_number() over (partition by col1, col2, col3 order by count(*) desc) as seqnum
from t
group by col1, col2, col3, col4
) t
where seqnum = 1;
你的预期产出是什么?戈登的回答很有效。我想要每一列,加上第四列的计数。我使用的是Gordon,但不是指定seqnum=1,而是使用seqnum>1来挑选“重复项”。谢谢!这种模式并不完全是我想要的,但它非常有帮助,为我指明了正确的方向。