SQL Server:使用视图获取百分比

时间:2018-12-14 12:13:43

标签: sql sql-server

查询是:对于每个产品类别,在星期二购买该产品类别的客户占购买该类别的客户总数的百分比。

我的尝试是:

with temp1 as 
(
    select 
        pc.product_category, 
        count(distinct(s.customer_id)) as customers_tuesdays
    from 
        sales_fact s, product p, product_class pc, customer c, time_by_day t
    where  
        s.customer_id = c.customer_id 
        and s.product_id = p.product_id
        and p.product_class_id = pc.product_class_id 
        and s.time_id = t.time_id
        and t.the_day = 'Tuesday'
    group by 
        pc.product_category
 ),
 temp2 as 
 (
     select 
         pc.product_category, 
         count(distinct(s.customer_id)) as customers_all
     from  
         sales_fact s, product p, product_class pc
     where 
         s.product_id = p.product_id
         and p.product_class_id = pc.product_class_id 
     group by 
         pc.product_category
)
select 
    temp2.product_category, customers_tuesdays/customers_all as ratio
from 
    temp1, temp2

这个想法是,我要查看星期二在每个类别中购买的客户数量(temp1),另一个视图是每个类别中所有客户的数量(temp2),最后是要查询的主查询每个类别的比率;我知道每个视图的输出给出了正确的结果,但是最终查询的输出是错误的(我得到的产品类别重复了很多次,比率为0)。基本上我在合并两个视图以获取比率时遇到问题。问题出在哪里?

1 个答案:

答案 0 :(得分:1)

您正在做的一件事肯定会导致这个问题是整数除法。

在SQL Server中,当将整数除以整数时,将得到一个整数。

尝试更改此内容:

customers_tuesdays/customers_all

对此:

(customers_tuesdays * 1.0)/(customers_all * 1.0)