使用group by的2个结果集的sql server比率

使用group by的2个结果集的sql server比率,sql,sql-server,Sql,Sql Server,希望这是一个简单的问题,但我不能完全理解它。 Sql server 2012 基本上,我有一个用户表。每个用户都有一个“pincode”,这是他们要访问的组织的外键。然后,每个用户完成一系列模块,存储在一个由其用户id链接的单独表中。我想得到的是所有pincode的列表,其中包括用户总数,然后是完成总数,然后是用户数除以完成数的比率 下面的代码给了我一个结果列表,第一个结果是完成数,第二个结果是用户数,所以这是我需要的数据,我只是不知道如何返回一个带有比率列的结果。所以 select pinco

希望这是一个简单的问题,但我不能完全理解它。 Sql server 2012

基本上,我有一个用户表。每个用户都有一个“pincode”,这是他们要访问的组织的外键。然后,每个用户完成一系列模块,存储在一个由其用户id链接的单独表中。我想得到的是所有pincode的列表,其中包括用户总数,然后是完成总数,然后是用户数除以完成数的比率

下面的代码给了我一个结果列表,第一个结果是完成数,第二个结果是用户数,所以这是我需要的数据,我只是不知道如何返回一个带有比率列的结果。所以

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....

一如既往,我们非常感谢您的帮助

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

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

太棒了,不得不稍微修改一下,但这正是我想要的。以前从未使用/听说过with关键字,现在开始阅读。干杯这是一个常见的表表达式。有很多文档和例子。很高兴这对你有用。