如何计算具有给定成员的组的行数?
How to count rows for groups with a given member?
我有以下 table members
:
album_id | user_id
-------------------
1 1
1 2
1 4
2 1
2 4
4 1
5 3
对 (album_id, user_id)
具有唯一约束。
我想知道每个画廊有多少用户,但前提是画廊包含给定用户。
例如,如果我得到所有行 user_id = 4
,我想得到像
这样的结果
album_id | count(user_id)
-------------------------
1 3
2 2
SELECT album_id, count(*) AS ct
FROM tbl t
JOIN tbl t1 USING (album_id)
WHERE t.user_id = 4
GROUP BY 1
ORDER BY 1; -- optional
我在许多可能的解决方案中选择了这种形式,因为它可以在 (user_id)
.
上使用索引
为了获得最佳性能,您有两个索引:一个在 (user_id, album_id)
上,另一个在 (album_id)
上(或以 album
作为前导列的多列索引)。参见:
假设 user_id
是 NOT NULL
,那么 count(*)
是等效的,但更快。参见:
我有以下 table members
:
album_id | user_id
-------------------
1 1
1 2
1 4
2 1
2 4
4 1
5 3
对 (album_id, user_id)
具有唯一约束。
我想知道每个画廊有多少用户,但前提是画廊包含给定用户。
例如,如果我得到所有行 user_id = 4
,我想得到像
album_id | count(user_id)
-------------------------
1 3
2 2
SELECT album_id, count(*) AS ct
FROM tbl t
JOIN tbl t1 USING (album_id)
WHERE t.user_id = 4
GROUP BY 1
ORDER BY 1; -- optional
我在许多可能的解决方案中选择了这种形式,因为它可以在 (user_id)
.
为了获得最佳性能,您有两个索引:一个在 (user_id, album_id)
上,另一个在 (album_id)
上(或以 album
作为前导列的多列索引)。参见:
假设 user_id
是 NOT NULL
,那么 count(*)
是等效的,但更快。参见: