应该是一个简单的问题,但我无法理解它。 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....
与往常一样,非常感谢您的帮助
答案 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