两个结果集中的sql server ratio与

时间:2017-10-12 16:29:20

标签: sql sql-server

应该是一个简单的问题,但我无法理解它。 Sql server 2012

基本上,我有一个用户表。每个用户都有一个' pincode',这是他们下面的组织的外键。然后,每个用户完成许多模块,这些模块存储在由user_id链接的单独表中。我想得到的是所有pincodes的列表,包括用户总数,然后是完成总数,然后是用户数除以完成次数的比率。

下面的代码给出了一个结果列表,第一个结果是完成次数,第二个结果是用户数,所以这是我需要的数据,我只是无法弄清楚如何使用比率列返回一个结果。所以......

select pincode,   count(*) as totcomps from modules 
inner join users on users.user_id=modules.user_id  
group  by pincode

union all

select pincode,   count(*) as totusers from users  
group  by pincode
order by pincode

给我回报

site1    50 // number of completions
site1    10 // number of users
site2    130
site2   12
site3    2
site3    1 
etc 
.

我想要的是它返回:

site1 50, 10, 5   // pincode, totcomps, totusers, totcomps/totusers
site2 130, 12, 10.83
site3 2, 1, 2
etc....

与往常一样,非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这是解决这个问题的一种方法。不是100%肯定这是有效的,因为我们没有任何ddl或样本数据。

with pincodes as
(
    select pincode
        , count(*) as totcomps 
    from modules 
    inner join users on users.user_id = modules.user_id  
    group by pincode
)
, Users as
(
    select pincode
        , count(*) as totusers 
    from users  
    group by pincode
)

select p.pincode
    , p.totcomps
    , u.totusers
    , p.totcomps / (u.totusers * 1.0) --need to multiply by 1.0 to avoid integer division
from pincodes p
join Users u on u.pincode = p.pincode