我有一个用户表,我有另一个表有活动,有活动的用户登录一列。我怎样才能进行查询,以便我可以选择每个用户拥有的活动数量。
我真的无法想到如何做到这一点,也无法在网上搜索这样的内容。
所以例如
用户表
id | name
1 | john
2 | karen
活动表
id | user_id
1 | 1
2 | 1
3 | 2
结果
name | Count
john | 2
karen| 1
答案 0 :(得分:2)
利用LEFT JOIN
和COUNT
汇总
SELECT name, COUNT(a.user_id) count
FROM [User] u LEFT JOIN Activity a
ON u.id = a.user_id
GROUP BY u.id, u.name
输出:
| name | count | |-------|-------| | john | 2 | | karen | 1 |
这是 SQLFiddle 演示
推荐阅读:
答案 1 :(得分:1)
select name, count(a.Id) as ActivityCount
from [user] u
inner join activity a on u.Us = a.UserId
group by name
答案 2 :(得分:1)
select
u.id as user_id, -- name is not necessary unique
max(u.name) as name,
count(a.Id) as [count]
from
[User] u
left join Activity a -- left join becuase some users can have no activities
on u.Id = a.user_id
group by u.id
答案 3 :(得分:1)
非常简单。您可以使用连接组合这两个表。为了增加计数(即总计数),可以使用一种方便的“计数”功能。总而言之,它看起来像这样 -
select u.id, u.name, count(*) as ct
from tblUser u
left join tblActivity a on u.id = a.id
group by u.id, u.name
order by ct desc