通过id sql

首先,这是我的表架构:

order_id,product_id,add_to_cart_order,reordered

我的问题是计算产品的重新订购率。因此,我们可以看到“ add_to_cart_order”没有用,我不知道“ order_id”。 “重新排序”的值可以为“ 1”和“ 0”。

目前,我可以使用

通过product_id进行“排序”
SELECT 
    product_id,COUNT(reordered) 
FROM 
    train 
WHERE
    reordered = '1' 
GROUP BY 
    product_id;

和带有

的产品的出现次数
SELECT 
    product_id,COUNT(*) 
FROM
    train  
GROUP BY 
    product_id;

我尝试了

SELECT 
    t1.product_id,COUNT(t1.product_id) / (SELECT COUNT(reordered) 
                            FROM train t2 
                            WHERE t2.reordered = '1' 
                              AND t1.product_id = t2.product_id 
                            GROUP BY product_id) 
FROM
    train t1 
GROUP BY
    t1.product_id;

但是要花费太多时间(我不知道这是否是正确的请求,因为我还没有结果)

yujunjie19860211 回答:通过id sql

这是您要寻找的吗?

SELECT Product_id,SUM(CASE WHEN reordered=1 THEN 1 ELSE 0 END ) /
COUNT(*) AS ReorderedRate
FROM
train
GROUP BY Product_id
,

尝试这种优雅

SELECT t1.product_id,SUM(CASE WHEN reordered = 1 THEN 1 ELSE 0 END) / COUNT(t1.product_id)
FROM train t1 
GROUP BY t1.product_id;
,

我认为最简单的方法是使用AVG()

SELECT product_id,AVG(CASE WHEN reordered = '1' THEN 1.0 ELSE 0 END) 
FROM train 
GROUP BY product_id;

如果重新排序实际上是一个仅采用值01的数字,那么您可以将其进一步简化为:

SELECT product_id,AVG(reordered)
FROM train 
GROUP BY product_id;

或:

SELECT product_id,AVG(reordered * 1.0)
FROM train 
GROUP BY product_id;

在将整数平均值作为整数返回的数据库中,需要第二个。

,

这将为每个product_id计算:     火车cnt_prod中的行数     火车cnt_prod_reorder中重新排序的行数

SELECT t1.product_id,COUNT(t1.product_id) as cnt_prd,COUNT(case when t.1.reordered='1' then  1 else NULL end ) as cnt_prd_reord 
from train t1 group by t1.product_id;

因此,您可以执行以下操作:

select st.product_id,st.cnt_prd,st.cnt_prd / st.cnt_prd_reord
from (
     SELECT t1.product_id,COUNT(case when t.1.reordered='1' then  1 else NULL end   ) as cnt_prd_reord 
     from train t1 group by t1.product_id 
) as st ;
本文链接:https://www.f2er.com/3042956.html

大家都在问