代码之家  ›  专栏  ›  技术社区  ›  Bhashithe

选择计数为某个值的多条记录

  •  0
  • Bhashithe  · 技术社区  · 8 年前

    有一个巨大的数据库,有超过500k个值,但只有一个表包含所有数据。我需要为给定的条件提取一些。

    表结构是这样的,

    column_a | column_b    
    A        | 30    
    A        | 40    
    A        | 70    
    B        | 25    
    B        | 45    
    C        | 10    
    C        | 15    
    C        | 25
    

    我需要提取count(column_a)=3的所有数据。问题是我还需要获取所有三条记录。这样地,

    column_a | column_b 
    A        | 30    
    A        | 40    
    A        | 70    
    C        | 10    
    C        | 15    
    C        | 25
    

    我尝试用这样的查询来完成此操作

    select column_a,column_b group by column_a having count(*)=3;
    

    在这里,我得到了column_a的正确值,但每个记录只有一条。

    提前感谢, 巴希族

    2 回复  |  直到 8 年前
        1
  •  3
  •   Tim Biegeleisen    8 年前

    一种方法是 INNER JOIN 将原始表转换为子查询,该子查询标识 column_a 记录以3个为一组。

    SELECT t1.column_a, t1.column_b
    FROM table t1
    INNER JOIN
    (
        SELECT column_a, COUNT(*)
        FROM table
        GROUP BY column_a
        HAVING COUNT(*) = 3
    ) t2
    ON t1.column_a = t2.column_a
    
        2
  •  1
  •   Ashyboy    8 年前

    如果需要,可以使用嵌套查询。 这里,内部查询获取具有 column_a 大小等于3,外部查询使用 'IN' 条款

    SELECT t.column_a, t.column_b FROM table t
    WHERE t.column_a IN 
    (
        SELECT t1.column_a FROM table t1
        GROUP BY t1.column_a
        HAVING COUNT(t1.column_a) = 3
    ) 
    ORDER BY t.column_a;