gpt4 book ai didi

mysql - 如何计算百分比?

转载 作者:行者123 更新时间:2023-11-29 10:04:50 24 4
gpt4 key购买 nike

您能帮我计算一下付款的用户百分比吗?我有两张 table :

activity
user_id login_time
201 01.01.2017
202 01.01.2017
255 04.01.2017
255 05.01.2017
256 05.01.2017
260 15.03.2017

2

payments
user_id payment_date
200 01.01.2017
202 01.01.2017
255 05.01.2017

我尝试使用此查询,但它计算出错误的百分比:

SELECT activity.login_time, (select COUNT(distinct payments.user_id) 
from payments where payments.payment_time between '2017-01-01' and
'2017-01-05') / COUNT(distinct activity.user_id) * 100
AS percent
FROM payments INNER JOIN activity ON
activity.user_id = payments.user_id and activity.login_time between
'2017-01-01' and '2017-01-05'
GROUP BY activity.login_time;

我需要一个结果

01.01.2017  100 % 
02.01.2017 0%
03.01.2017 0%
04.01.2017 0%
05.01.2017 - 50%

最佳答案

如果您想要了解已付款用户与活跃用户的比例,只需单独汇总每个表格即可:

select p.cnt / a.cnt
from (select count(distinct user_id) as cnt from activity a) a cross join
(select count(distinct user_id) as cnt from payment) p;

编辑:

您需要一个包含该范围内所有日期的表格。这是最大的问题。

那么我推荐:

SELECT d.dte,
( ( SELECT COUNT(DISTINCT p.user_id)
FROM payments p
WHERE p.payment_date >= d.dte and p.payment_date < d.dte + INTERVAL 1 DAY
) /
NULLIF( (SELECT COUNT(DISTINCT a.user_id)
FROM activity a
WHERE a.login_time >= d.dte and p.login_time < d.dte + INTERVAL 1 DAY
), 0
) as ratio
FROM (SELECT date('2017-01-01') dte UNION ALL
SELECT date('2017-01-02') dte UNION ALL
SELECT date('2017-01-03') dte UNION ALL
SELECT date('2017-01-04') dte UNION ALL
SELECT date('2017-01-05') dte
) d;

注释:

  • 如果没有事件,则返回 NULL。这对我来说比 0 更有意义。
  • 这使用了适用于日期和日期/时间值的日期逻辑。
  • 日期逻辑可以使用索引,这对于此类查询非常重要。
  • 我不建议使用LEFT JOIN。这会增加数据量,从而导致查询成本高昂。

关于mysql - 如何计算百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com