代码之家  ›  专栏  ›  技术社区  ›  J. Krajewski

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

  •  0
  • J. Krajewski  · 技术社区  · 2 年前

    我有下表 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
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Erwin Brandstetter    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(*) 是等效的,但速度更快。请参见: