如何在sql中为每个用户返回最常见的登录位置(可能重复)?

2w3kk1z5  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(238)

这是我的第一个职位,所以请容忍我。
我已经研究了一个大数据集的问题一个星期了,现在我的头撞到墙上了。基本上,我有一个数据库,其中包含用户每次访问服务的记录;每个记录都有一个与用户相关联的唯一id(user\u id),一个分配的国家标签(demo\u tag),它可能在访问之间有所不同(demo\u tag),这是关于用户地理位置的最佳猜测,还有一堆我目前不担心的其他信息。
我想要完成的是根据用户访问某个指定国家的服务的次数来确定用户最有可能居住在哪个国家。如果出现并列,我希望检索两个地区(例如,一个用户从法国和比利时登录的次数相等,我希望将该用户与这两个国家关联)。基本上,对于每个用户,我想知道他们从一个特定位置登录的最大次数,以及它/他们是哪个位置。
e、 g.如果我有:

user_id region
1       USA
1       CAN
1       CAN
2       MEX
2       MEX
2       USA
2       USA

我希望能回来:

user_id region count
1       CAN    2
2       MEX    2
2       USA    2

现在我有一个非常难看的多嵌套查询,我觉得一定有更好的方法。有什么建议吗?

gudnpqoy

gudnpqoy1#

使用 group by 以及 rank() :

select ur.*
from (select user_id, region, count(*),
             rank() over (partition by user_id order by count(*) desc) as seqnum
      from t
      group by user_id, region
     ) ur
where seqnum = 1;

相关问题