【问题标题】:Percentage of players who play this game each month Redshift每月玩此游戏的玩家百分比 Redshift
【发布时间】:2019-03-09 18:11:20
【问题描述】:

此查询从活动表中获取每月所有活跃玩家的数量:

SELECT
  date_trunc('month', createdat) as month,
  count(distinct playerid) as play_all
FROM
    activity
group by month
order by 1

这个查询得到每个月玩“蜜蜂”游戏的玩家数量:

SELECT
  date_trunc('month', createdat) as month,
  count(distinct playerid) as play_bee
FROM
    activity
where gamename = 'bee'    
group by month
order by 1

如何获取每个月玩“蜜蜂”游戏的玩家百分比?

【问题讨论】:

    标签: sql amazon-web-services amazon-redshift


    【解决方案1】:

    这可能有效:

    SELECT
      DATE_TRUNC('month', createdat) AS month,
      COUNT(DISTINCT playerid) AS play_all,
      COUNT(DISTINCT CASE WHEN gamename = 'bee' THEN playerid END) AS play_bee,
      100. * COUNT(DISTINCT CASE WHEN gamename = 'bee' THEN playerid END)
           / COUNT(DISTINCT playerid) AS percent_play_bee,
    FROM
        activity
    group by month
    order by 1
    

    它使用了这样一个事实:如果gamename = 'beeCASE WHEN gamename = 'bee' THEN playerid END 将返回 playerid,但如果不是,则返回 NONE。 (我不确定 NONE 响应是否会包含在 COUNT(DISTINCT..) 中,因此它可能会关闭 1。)

    基本上,CASE 是针对每一行单独评估的。然后,将这些值设为 DISTINCT,然后对它们进行计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多