代码之家  ›  专栏  ›  技术社区  ›  Ólafur Waage

如何获取值在其自身查询中的总出现次数?

  •  3
  • Ólafur Waage  · 技术社区  · 15 年前

    假设我们有这个问题

    SELECT * FROM table
    

    id | user_id
    ------------
    1  | 1
    ------------
    2  | 1
    ------------
    3  | 2
    ------------
    4  | 1
    

    如何获得用户id作为另一个字段出现的频率计数(没有一些主要的SQL查询)

    id | user_id | count
    --------------------
    1  | 1       | 3
    --------------------
    2  | 1       | 3
    --------------------
    3  | 2       | 1
    --------------------
    4  | 1       | 3
    

    顺便说一句,如果没有一些主要技巧,这是不可能的,我们将跳过该字段的排序。

    2 回复  |  直到 5 年前
        1
  •  3
  •   Chad Birch    15 年前

    我相信,您只需要在末尾添加一个子查询:

    SELECT
        t.id,
        t.user_id,
        (SELECT COUNT(*) FROM table WHERE user_id = t.user_id) AS `count`
    FROM table t;
    
        2
  •  0
  •   Stefan Gehrig    15 年前
    SELECT o.id, o.user_id, (
        SELECT COUNT(id) 
        FROM table i 
        WHERE i.user_id = o.user_id 
        GROUP BY i.user_id
    ) AS `count`
    FROM table o
    

    我怀疑这个查询不是一个性能怪物,但它应该可以工作。