以下是我的示例数据表:

ID Status
1 New
1 Processed
2 New
2 Processed
3 New
3 Processed
4 Processed
5 New

我试图解决的是计算从"新"状态到"已处理"状态的转换率.从数据集中来看,只有ID 1、2和3满足了我的问题的要求,ID 4和5没有两个阶段.所以理论上,转换率应该是3/5*100%=60%.如何 Select 数据以计算具有"新建"和"已处理"状态的ID.

这是我try 过的代码,但我知道它是错误的,因为它提取了所有ID,但它们之间没有链接.

SELECT 'Conversion rate from Assigned enquiry to In progess leads' as 'Name', round((a.processed / b.new),3) * 100 as 'Answer'
FROM
(
SELECT cast(count(ID)as float) as processed
from table1
WHERE STATUS_ID = 'Processed'
) as a
cross join
(
SELECT cast(count(ID)as float) as new
from table_1
WHERE STATUS_ID = 'NEW'
) as b

推荐答案

我们可以在这里使用条件聚合:

WITH cte AS (
    SELECT CASE WHEN COUNT(CASE WHEN Status = 'New' THEN 1 END) > 0 AND
                     COUNT(CASE WHEN Status = 'Processed' THEN 1 END) > 0
                THEN 1 ELSE 0 END AS cnt
    FROM yourTable
    GROUP BY ID
)

SELECT 100.0 * SUM(cnt) / COUNT(*)
FROM cte;

Sql相关问答推荐

SQL查询以条件空值跟踪生产操作结果进展

SQL查询:合并2个表

如何在联接条件不匹配时按日期获取上一条记录

基于多参数的SQL Server条件过滤

在xml.Modify方法中使用子字符串和可能的替代方法

根据是否出现过零来筛选数据(跨多行)

从选定记录中提取摘要作为值的划分

在 SQL Server 中合并两个 XML 列

如何根据创建日期查找两个表中最接近的记录?

特殊条件计算小计

如何为 ActiveRecord 联接应用附加条件

SQL:考虑合并分支计算分支的增长百分比

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

SQL 多个不满足的条件失败

joins 组合多个重复数据删除策略

更新表 A,然后将新值插入表 B(包含更新内容的历史日志(log))

在多个表上递归查找

来自 SQL Server 的树层次 struct 图的 JSON

CURRENT_ROW 窗口框架上的 SQL 滞后

在 PostgreSQL 中,如何将数组中的每个元素用作另一个表中的键?