如何计算具有给定成员的组的行数?

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_idNOT NULL,那么 count(*) 是等效的,但更快。参见: