MySQL 选择一个字段的计数大于一的地方

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3710483/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 17:09:57  来源:igfitidea点击:

Select where count of one field is greater than one

sqlmysql

提问by stevebot

I want to do something like this:

我想做这样的事情:

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

How can I achieve this in MySql?

如何在 MySql 中实现这一点?

回答by OMG Ponies

Use the HAVING, not WHEREclause, for aggregate result comparison.

使用HAVING, notWHERE子句进行聚合结果比较。

Taking the query at face value:

以面值查询:

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

Ideally, there should be a GROUP BYdefined for proper valuation in the HAVINGclause, but MySQL does allow hidden columns from the GROUP BY...

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

Is this in preparation for a unique constraint on someField? Looks like it should be...

这是在为 上的唯一约束做准备someField吗?看起来应该是...

回答by dandy_sql

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

回答by Bill Karwin

You can also do this with a self-join:

您也可以使用自联接来执行此操作:

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

回答by Nalan Madheswaran

Here you go:

干得好:

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

回答by Martin Smith

One way

单程

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

回答by Brent Arias

As OMG Ponies stated, the having clause is what you are after. However, if you were hoping that you would get discrete rows instead of a summary (the "having" creates a summary) - it cannot be done in a single statement. You must use two statements in that case.

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

回答by user4551254

I give an example up on Group By between two table in Sql:

我举了一个例子,关于 Sql 中两个表之间的分组依据:

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

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



回答by Maham Khan

For me, Not having a group by just returned empty result. So i guess having a group by for the having statement is pretty important

对我来说,没有一个组只是返回空结果。所以我想有一个小组来发表声明是非常重要的

回答by Jim Blanchard

It should also be mentioned that the "pk" should be a key field. The self-join

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

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

by Bill Karwin give you all the records that are duplicates which is what I wanted. Because some have more than two, you can get the same record more than once. I wrote all to another table with the same fields to get rid of the same records by key fields suppression. I tried

by Bill Karwin 为您提供所有重复记录,这正是我想要的。因为有些有两个以上,您可以多次获得相同的记录。我将所有内容写入另一个具有相同字段的表,以通过关键字段抑制来摆脱相同的记录。我试过

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

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

above first. The data returned from it give only one of the duplicates, less than 1/2 of what this gives you but the count is good if that is all you want.

以上先。从它返回的数据只给出一个重复项,不到它给你的数据的 1/2,但如果这就是你想要的,那么计数就很好。