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

我想这样做:

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

我如何在 MySql 中实现这一点?

378711 次浏览

使用 HAVING而不是 WHERE子句进行聚合结果比较。

从表面上看问题:

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

理想情况下,应该有一个 GROUP BY定义为适当的估值在 HAVING条款,但 MySQL 确实允许 GROUPBY 中的隐藏列..。

这是为 someField的独特约束做准备吗? 看起来应该是..。

单程

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

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

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
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3

还应该提到的是,“ 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

above first. 从它返回的数据只提供了一个副本,不到它所提供的数据的1/2,但是如果这就是您想要的全部,那么计数就很好。

我举了一个关于 GroupBy 的例子,它位于 Sql 中的两个表之间:

选择 cn.name、 ct.name、 count (ct.id) talcity 从城市 ct 左边加入国家 cn on ct.country id = cn.id 按 cn.name、 ct.name 分组 具有 Total city > 2


对于我来说,没有一组只是返回空结果。所以我想让一群人来做陈述是很重要的

给你:

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

没有 拥有

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

or with 拥有

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

也许:

SELECT *
FROM [Table]
where field IN (
select field
from [Table]
group by field
having COUNT(field)>1 )