sql 如何从窗口函数中提取最常见的值
sql how to extract the most common of values from a windowing function
我的数据看起来像
id channel amount date
a PHONE 50 '1sep2014'
a PHONE 100 '1oct2014'
a INTERNET 20 '4oct2014'
b PHONE 25 '2oct2014'
b INTERNET 30 '3oct2014'
c INTERNET 35 '1oct2014'
c INTERNET 20 '2oct2014'
c INTERNET 100 '3oct2014'
如果可能的话,我想一步标记出每个 id 最常见的频道。
我知道如何使用 group by 和 self joining 来做到这一点,但是不使用 self join 最简单的方法是什么?
我的第一个查询中已经有一个 row_number() OVER(PARTITION BY ID ORDER BY DATE DESC)
,因为我需要从这个 table 获取最新的值/通道等。如果可能的话,我想将它们全部绑定到同一个查询中。
您可以使用 window 函数和 group by
:
select id, channel
from (select id, channel, count(*) as cnt,
row_number() over (partition by id order by count(*) desc) as seqnum
from table t
group by id, channel
) ic
where seqnum = 1;
我的数据看起来像
id channel amount date
a PHONE 50 '1sep2014'
a PHONE 100 '1oct2014'
a INTERNET 20 '4oct2014'
b PHONE 25 '2oct2014'
b INTERNET 30 '3oct2014'
c INTERNET 35 '1oct2014'
c INTERNET 20 '2oct2014'
c INTERNET 100 '3oct2014'
如果可能的话,我想一步标记出每个 id 最常见的频道。 我知道如何使用 group by 和 self joining 来做到这一点,但是不使用 self join 最简单的方法是什么?
我的第一个查询中已经有一个 row_number() OVER(PARTITION BY ID ORDER BY DATE DESC)
,因为我需要从这个 table 获取最新的值/通道等。如果可能的话,我想将它们全部绑定到同一个查询中。
您可以使用 window 函数和 group by
:
select id, channel
from (select id, channel, count(*) as cnt,
row_number() over (partition by id order by count(*) desc) as seqnum
from table t
group by id, channel
) ic
where seqnum = 1;