select一个字段的数量大于1的地方
我想要做这样的事情:
SELECT * FROM db.table WHERE COUNT(someField) > 1
我怎么能在MySql中实现这一点?
使用HAVING
而不是WHERE
子句进行聚合结果比较。
以面值查询:
SELECT * FROM db.table HAVING COUNT(someField) > 1
理想情况下,在HAVING
子句中应该有一个用于正确评估的GROUP BY
,但是MySQL确实允许GROUP BY中的隐藏列 。
这是否准备对someField
进行唯一约束? 看起来应该是…
你也可以使用自连接来做到这一点:
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
单程
SELECT t1.* FROM db.table t1 WHERE exists (SELECT * FROM db.table t2 where t1.pk != t2.pk and t1.someField = t2.someField)
正如OMG Ponies所说的那样,有条件的是你所追求的。 但是,如果您希望获得离散行而不是摘要(“有”创build摘要),则不能在单个语句中完成。 在这种情况下,你必须使用两个语句。
我在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
对我来说,没有一个团队只是返回空的结果。 所以我想有一个团体由有声明是非常重要的
还应该提到,“PK”应该是一个关键领域。 自我join
SELECT t1.* FROM db.table t1 JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
由比尔·卡尔文给你所有的logging是重复的,这是我想要的。 因为有些人有两个以上,你可以多次获得相同的logging。 我写了所有到相同的字段的另一个表,通过关键字段抑制来摆脱相同的logging。 我试过了
SELECT * FROM db.table HAVING COUNT(someField) > 1
以上第一。 从它返回的数据只给出一个副本,less于这个给你的一半,但如果这是你想要的只是计数好。