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

ste*_*bot 95 mysql sql

我想做这样的事情:

SELECT * 
  FROM db.table 
 WHERE COUNT(someField) > 1
Run Code Online (Sandbox Code Playgroud)

我怎样才能在MySql中实现这一点?

OMG*_*ies 143

使用HAVING,not WHERE子句进行聚合结果比较.

以面值进行查询:

SELECT * 
  FROM db.table 
HAVING COUNT(someField) > 1
Run Code Online (Sandbox Code Playgroud)

理想情况下,应该GROUP BYHAVING子句中定义适当的估值,但MySQL确实允许来自GROUP BY的隐藏列 ...

这是为了准备一个独特的约束someField吗?看起来应该是......

  • 确实需要`GROUP BY`(除非这是一些MySQL非标准的东西)? (10认同)

小智 16

SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Run Code Online (Sandbox Code Playgroud)

  • 这里唯一的警告(至少在5.1.46-community MySQL社区服务器(GPL)中)是"每个派生表必须有自己的别名",这将使你的SQL看起来像:SELECT username,numb from(选择用户名, count(用户名)为来自客户的NCumb用户名)为my_table WHERE numb> 3 (3认同)

Bil*_*win 14

你也可以通过自我加入来做到这一点:

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Run Code Online (Sandbox Code Playgroud)


Mar*_*ith 5

单程

SELECT t1.* 
FROM db.table t1
WHERE exists 
      (SELECT *
      FROM db.table t2 
      where t1.pk != t2.pk 
      and t1.someField = t2.someField)
Run Code Online (Sandbox Code Playgroud)


Nal*_*ran 5

干得好:

SELECT Field1, COUNT(Field1)
  FROM Table1 
 GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Run Code Online (Sandbox Code Playgroud)