Sql 使用一个查询从不同表中计数

Sql 使用一个查询从不同表中计数,sql,sql-server,azure,Sql,Sql Server,Azure,表用户登录名: userid logintime 11111 2019.10.10 11111 2019.09.10 22222 2019.10.10 表1.福利: userid benefit 11111 A 11111 B 22222 C 22222 C 22222 C 我希望结果如下: userid benefitcount logincount 11111 2 2 22222 3 1 这个代码

表用户登录名:

userid  logintime
11111   2019.10.10
11111   2019.09.10
22222   2019.10.10
表1.福利:

userid  benefit
11111   A
11111   B
22222   C
22222   C
22222   C
我希望结果如下:

userid  benefitcount logincount
11111   2            2
22222   3            1
这个代码不起作用。我怎样才能解决这个问题

select count(B.userid) as benefitcounts, count(UL.userid) as userlogins
from userlogins UL
inner join benefit B on B.userid=UL.userid
group by UL.userid

谢谢

您可以
加入两个聚合子查询,如下所示:

SELECT 
    u.userid,
    u.logincount,
    b.benefitcount
FROM
(
    SELECT userid, COUNT(*) logincount FROM userlogins GROUP BY userid
) u
INNER JOIN (
    SELECT userid, COUNT(*) benefitcount FROM benefits GROUP BY userid
) b ON u.userid = b.userid
如果每个表中都有唯一的键,则可以优化此查询:

SELECT 
    u.userid,
    COUNT(DISTINCT u.id) logincount,
    COUNT(DISTINCT b.id) benefitcount
FROM userlogins u
INNER JOIN benefitcount b ON u.userid = b.userid
GROUP BY u.userid

你想要什么?什么东西不管用?指定问题和期望的结果。根据示例数据和您编写的代码,不清楚您想要完成什么。代码看起来很好,它会工作,这意味着不会产生任何错误,但是不是您想要的方式。代码正在工作,但没有带来期望的结果outcome@lewisatep:修正了。谢谢。两个答案都很好而且相似。但是我们能提高性能吗?@lewisatep:一个附带的问题:两个表中是否都有唯一的列?我在收益上有唯一的列,但在用户登录上没有。但当我使用SSI时,我可以向userlogin添加新的唯一列