如何计算 SQL 表中前一个数字的百分比?

Posted

技术标签:

【中文标题】如何计算 SQL 表中前一个数字的百分比?【英文标题】:How can I calculate a percentage of a preceding number in a SQL table? 【发布时间】:2020-01-03 17:51:08 【问题描述】:

我正在创建一个留存同类群组,它显示我的用户群在我们的应用中的留存情况,但我只知道如何计算计数版本中的结果,但是我真的希望结果是总同类群组的百分比起始组(即在第 0 个月,我们在平台上有 1000 个活跃用户,但在第 2 个月只有 500 个用户仍然活跃,因此第 2 个月的保留百分比将为 50%,在第 3 个月只有 300 仍然活跃,因此保留 = 30%)。

我编写的用于计算以下每个月的计数的代码:

select count(distinct u.id), count(t.id), [u.created:month] as ucm, (datediff(month,[u.created:month],[t.createdon:month])) as cohort
from [user_cache as u]
right join [transaction_cache as t] on t.owner = u.id
and t.status = 'successful' and t.type = 'savings'
where [u.created:year] > ['2017-01-01':date:year]
group by ucm, cohort
order by ucm asc

谢谢

【问题讨论】:

它正在查询缓存在 Periscope 中的数据,因此代码必须与 redshift 兼容。我对 SQL 很陌生,我以为是 tsql 但我可能在那里犯了一个错误。 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称(而且您查询的是无效的标准 SQL)。 Why should I tag my DBMS 我相信我在做一些研究后正在使用 postgreSQL。我们的数据库通过 AWS redshift 运行。 【参考方案1】:

你需要这样的东西。更改第 4 行中的子查询以选择正确的初始队列。如果运行多年,则需要在 GROUP BY 中考虑年份和月份,但逻辑保持不变。

SELECT 
    DATEPART(MONTH,t.createdon) month
    , COUNT(*) activeCohortNumber
    , COUNT(*)*100.00 / 
        (SELECT COUNT(*) FROM dbo.transaction_cache WHERE DATEPART(MONTH,createdon) = 1) 
     AS activeCohortPercent
FROM user_cache AS u
RIGHT JOIN transaction_cache AS t ON t.owner = u.id
GROUP BY DATEPART(MONTH,t.createdon)

【讨论】:

以上是关于如何计算 SQL 表中前一个数字的百分比?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 语句计算百分比

计算查询中的百分比 - Access SQL

使用 T-SQL 如何计算考试成绩百分比?

使用sql语句计算百分比

当存在 2 个分组条件时如何计算 mysql/sql 中的百分比

SQL怎么把小数转换为百分比?