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

时间:2010-09-14 15:43:17

标签: sql mysql

我想做这样的事情:

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

如何在MySql中实现这一目标?

10 个答案:

答案 0 :(得分:140)

使用HAVING而非WHERE子句进行汇总结果比较。

以面值进行查询:

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

理想情况下,GROUP BY子句中应该为HAVING子句定义someField,但MySQL does allow hidden columns from the GROUP BY ...

这是为{{1}}的唯一约束做准备吗?看起来应该是......

答案 1 :(得分:14)

您也可以使用自我加入来执行此操作:

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

答案 2 :(得分:14)

SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3

答案 3 :(得分:5)

您在这里:

SELECT Field1, COUNT(Field1)
  FROM Table1 
 GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc

答案 4 :(得分:4)

单程

SELECT t1.* 
FROM db.table t1
WHERE exists 
      (SELECT *
      FROM db.table t2 
      where t1.pk != t2.pk 
      and t1.someField = t2.someField)

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我举一个关于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


答案 7 :(得分:1)

对我来说,没有一个组只返回空结果。所以我觉得有一个分组,因为有声明是非常重要的

答案 8 :(得分:0)

没有

SELECT COL,TOTAL FROM (SELECT SPORT, COUNT(COL) AS TOTAL FROM db.table GROUP BY SPORT) WHERE TOTAL > 100 ORDER BY TOTAL 

或有

SELECT COL, COUNT(COL) AS TOTAL FROM db.table GROUP BY SPORT HAVING TOTAL > 100 ORDER BY COL

答案 9 :(得分:-2)

还应该提到“pk”应该是关键字段。 自我加入

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

为您提供所有重复的记录,这是我想要的。因为有些人有两个以上, 你可以不止一次获得相同的记录。我写了所有到具有相同字段的另一个表,以通过关键字段抑制来消除相同的记录。 我试过了

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

首先是

。 从它返回的数据只给出其中一个副本,不到它给你的1/2,但如果这就是你想要的那么计数是好的。