每行红移数据库中列出的最受欢迎的类别

Posted

技术标签:

【中文标题】每行红移数据库中列出的最受欢迎的类别【英文标题】:Most popular category listed with every row redshift database 【发布时间】:2020-01-31 09:59:20 【问题描述】:

我需要以下数据: 例如 瑞典男牌A EUR 瑞典女性品牌A EUR 瑞典男牌B EUR 英伦男牌A EUR 英国女品牌A EUR 英国男牌B EUR 英国女品牌C EUR

EUR 来自这样一个事实,即 8000 人中,5000 人使用欧元,2000 人使用 gbp,1000 人使用 SEk。所以最受欢迎的货币是欧元。我希望它显示在每一行

获取最受欢迎的货币,max_curr

并且对于返回的每一行都有一个名为 max_curr 的列并显示该值

    select 
cdl.country
,cd.gender
,cd.brand
,t.max_curr
from customer_data_list cdl  
left join customer_data cd on cd.customerid = cdr.customerid
left join 
(
    select 
        trans.customerid, a.*
    from
    (
        select
            a.*
            ,max(count_currency) over() as max_curr
        FROM
        (
            select 
                t.currency
                ,count(t.currency) as count_currency
            from transactions t
            where t.function = 'DEPOSIT' and t.status = 'ACCEPTED' 
            group by t.currency
            order by currency
        ) a
    ) a
    left join transactions trans on trans.currency = a.currency 
    where count_currency = max_curr) t on t.customerid = cdl.customerid 

这没有返回我需要的内容,因为大多数 max_curr 列条目都是空的。 有人可以帮忙吗?

【问题讨论】:

很难从您的解释和查询中评估您的期望。请分享示例数据和预期结果以进行澄清。 请提供样本数据、期望结果,并解释您所说的“最受欢迎的货币”是什么意思。 【参考方案1】:

如果对于每个客户,您想要最常用于 ACCEPTED、DEPOSIT 交易的货币,那么您可以使用聚合和窗口函数:

select cc.*
from (select t.customerid, t.currency, count(*) as cnt,
             row_number() over (partition by t.customerid order by count(*) desc) as seqnum
      from transactions t
      where t.function = 'DEPOSIT' and
            t.status = 'ACCEPTED' 
      group by t.customerid, t.currency
     ) cc
where seqnum = 1;

编辑:

对于问题的修改解释,只需使用交叉连接:

select t.customerid, t.currency, count(*) as cnt,
       tt.currency as most_popular_currency
from transactions t cross join
     (select t.currency
      from transactions t
      where t.function = 'DEPOSIT' and
            t.status = 'ACCEPTED'
      group by t.currency
      order by count(*) desc
      limit 1
     ) tt
where t.function = 'DEPOSIT' and
      t.status = 'ACCEPTED' 
group by t.customerid, t.currency

【讨论】:

感谢您的回复。我希望向所有客户显示总体上最受欢迎的货币。因此,换句话说,该列对所有人都是相同的。如果 EUR 是总体上最受欢迎的,那么列 max_curr 将是所有客户的 EUR

以上是关于每行红移数据库中列出的最受欢迎的类别的主要内容,如果未能解决你的问题,请参考以下文章

如何显示特定类别中最受欢迎的帖子

如何确定给定 npm 包的最受欢迎版本?

基于喜欢、分享和视图的最受欢迎帖子的算法[重复]

xml MTP Dyamic Ready主题导航设置(按类别)/侧边栏和“最受欢迎”部分。

计算最受欢迎课程的算法

5个最受欢迎的大数据可视化软件