繁体   English   中英

通过id sql计算属性的比率

[英]calculate rate of attribute by 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;

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

这是你想要的?

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;

如果 reordered 确实是一个仅取值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计算:train 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(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 
) as st ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM