首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL从一组用户中查找最常见的varchar

使用SQL从一组用户中查找最常见的varchar
EN

Stack Overflow用户
提问于 2020-03-17 23:05:03
回答 3查看 67关注 0票数 0

我有数以千计的用户,我正在努力寻找他们最常见的部分。数据如下所示:

代码语言:javascript
复制
User               Segment
User 1               Good
User 1               Good
User 1               Poor
user 2               Medium
user 2               Medium
User 3               Poor

在这种情况下,sql代码将返回:

对用户1有好处

用户2的媒体

不适合用户3

我尝试使用Max函数,但它只按字母顺序返回字符串,而不是与每个用户相关的最常见的字符串。作为fyi,细分市场可以在不同用户之间频繁更改。因此,它很可能会改变8-10次,但要寻找最能代表它们的那个。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2020-03-17 23:12:33

您可以使用row_number()count()分析函数来执行此操作:

代码语言:javascript
复制
select user,segment 
from (
  select user, segment, cnt,
    row_number() over(partition by user,segment order by cnt desc) as rn 
  from (
    select user, segment,
      count(segment) over(partition by user,segment) as cnt 
    from table) t1
  ) t2
where rn = 1;
票数 1
EN

Stack Overflow用户

发布于 2020-03-17 23:17:54

您可以使用聚合,如下所示:

代码语言:javascript
复制
select user,
       coalesce(max(case when segment = 'Good' then segment end),
                max(case when segment = 'Medium' then segment end),
                max(case when segment = 'Poor' then segment end)
               )
from t
group by user;
票数 1
EN

Stack Overflow用户

发布于 2020-03-17 23:48:43

因为window functions是在group by之后应用的,所以你也可以这样做。您可以将row_number()替换为rank()dense_rank()函数,具体取决于您希望如何处理平局。

代码语言:javascript
复制
select user, segment 
from
(select user, segment, row_number() over (partition by user order by count(*) desc) as rn
from your_table 
group by user, segment) t
where rn=1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60725042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档