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

选择一个字段的计数大于一的位置

  •  91
  • stevebot  · 技术社区  · 14 年前

    我想这样做:

    SELECT * 
      FROM db.table 
     WHERE COUNT(someField) > 1
    

    如何在MySql中实现这一点?

    9 回复  |  直到 8 年前
        1
  •  151
  •   OMG Ponies    14 年前

    使用 HAVING ,不是 WHERE 子句,用于汇总结果比较。

    按面值进行查询:

    SELECT * 
      FROM db.table 
    HAVING COUNT(someField) > 1
    

    GROUP BY 定义为在 条款,但是 MySQL does allow hidden columns from the GROUP BY

    这是在准备一个独特的约束吗 someField

        2
  •  22
  •   Nalan Madheswaran    6 年前

    干得好:

    SELECT Field1, COUNT(Field1)
      FROM Table1 
     GROUP BY Field1
    HAVING COUNT(Field1) > 1
    ORDER BY Field1 desc
    
        3
  •  18
  •   aroth    9 年前
    SELECT username, numb from(
    Select username, count(username) as numb from customers GROUP BY username ) as my_table
    WHERE numb > 3
    
        4
  •  14
  •   Bill Karwin    14 年前

    您也可以通过自联接来实现这一点:

    SELECT t1.* FROM db.table t1
    JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
    
        5
  •  4
  •   Martin Smith    14 年前

    SELECT t1.* 
    FROM db.table t1
    WHERE exists 
          (SELECT *
          FROM db.table t2 
          where t1.pk != t2.pk 
          and t1.someField = t2.someField)
    
        6
  •  1
  •   Brent Arias    14 年前

    正如OMG小马所说,having子句是你所追求的。但是,如果您希望得到离散行而不是摘要(“having”创建摘要),则不能在单个语句中完成。在这种情况下,你必须使用两种说法。

        7
  •  1
  •   user4551254    10 年前

    我举了一个关于Sql中两个表之间的Group By的例子:

    Select cn.name,ct.name,count(ct.id) totalcity from city ct left join country cn on ct.countryid = cn.id Group By cn.name,ct.name Having totalcity > 2


        8
  •  1
  •   Maham Khan    8 年前

    对我来说,没有一个组只是返回了一个空结果。所以我想有一个小组作为having语句是非常重要的

        9
  •  -2
  •   stevebot    11 年前

    还应该提到的是,“pk”应该是一个关键领域。 自连接

    SELECT t1.* FROM db.table t1
    JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 
    

    比尔·卡温给你的所有记录都是重复的,这正是我想要的。因为有些人不止两个, 你可以多次获得相同的记录。我将所有数据都写入另一个具有相同字段的表中,以便通过键字段消除相同的记录。 我试过了

    SELECT * FROM db.table HAVING COUNT(someField) > 1

    上面第一个。