SQL如何根据通信状态编写查询求平均值

问题描述 投票:0回答:1

我有一张表格,其中包含通过通信的用户进行的存款数量。但我无法根据每个项目中用户的平均存款数量来获取,具体取决于状态 - 用户是否收到了电子邮件。

代码:

select a.project_id, player_external_id, COUNT (player_external_id)
FROM gamestorage.exchanged_orders a
INNER JOIN gameanalytics.users_analytics b
ON a.player_external_id = b.external_id
WHERE TYPE ='deposit'
  and status='success'
  and payment_type='normal'
  and amount>=0
    and receive_emails = true
  Group BY 1,2

当然,我可以进行两个查询,例如

receive_
emails = true, receive
_email = false
,然后找到平均值,遭受大量行的困扰并进行双重工作。但我非常确定有更方便的方法。我应该如何根据通信状态过滤和转换结果(“receive_emails”列)?

sql postgresql calculated-columns
1个回答
0
投票

其他方式:

select a.project_id, player_external_id, COUNT (player_external_id)
  , COUNT(CASE WHEN receive_emails = true THEN player_external_id ELSE NULL END) / COUNT (player_external_id)
  , COUNT(CASE WHEN receive_emails = false THEN player_external_id ELSE NULL END) / COUNT (player_external_id)
FROM gamestorage.exchanged_orders a
INNER JOIN gameanalytics.users_analytics b
ON a.player_external_id = b.external_id
WHERE TYPE ='deposit'
  and status='success'
  and payment_type='normal'
  and amount>=0
  Group BY 1,2
© www.soinside.com 2019 - 2024. All rights reserved.