MySQL在表中获取该字段存在> x次的字段

Posted

技术标签:

【中文标题】MySQL在表中获取该字段存在> x次的字段【英文标题】:MySQL fetch a field where the field exists > x times in table 【发布时间】:2011-04-20 02:45:53 【问题描述】:

我正在尝试在 mysql 中执行以下操作:

SELECT DISTINCT field
FROM table
WHERE COUNT(field) > 10

失败的原因是:1111 - 组函数的使用无效(据我了解,您不能在 where 子句中使用 COUNT 之类的组函数?)

选择(区分)至少存在 N 行中的所有字段的正确方法是什么?这是我必须在外部使用 php 做的事情吗?

谢谢!

【问题讨论】:

【参考方案1】:

使用:

SELECT DISTINCT field
  FROM table
HAVING COUNT(field) > 10

您不能在WHERE 子句中的子查询之外使用聚合函数。这就是您需要使用HAVING 子句的原因。还有keep in mind that COUNT counts non-null values...

理想情况下,还应该有一个GROUP BY 子句。但是MySQL is rather lax about that。

比较所有

...您将不得不添加一个列出所有这些列GROUP BY 子句——在这种情况下没有速记。然后将HAVING 子句更改为COUNT(*) > 10

【讨论】:

可能我理解错了,但是当我运行它时,我总是返回 1 行,即使数据库中的几行存在超过 10 次也是如此。谢谢。 @Mahdi.Montgomery:要比较 all 列,您将不得不添加一个列出所有这些列的GROUP BY 子句——其中没有简写这个案例。然后将HAVING 子句更改为COUNT(*) > 10。如果您提供 CREATE TABLE 语句,帮助您会容易得多。

以上是关于MySQL在表中获取该字段存在> x次的字段的主要内容,如果未能解决你的问题,请参考以下文章

在表中添加和删除行 [带输入字段]

mysql 中如何给已存在的表中字段增设置主键?

MySQL - 使现有字段唯一

MySQL 选择唯一的排序字段值

实践001:char 类型字段在表中的长度

SQL中如何根据字段名查找该字段名存在于数据库的哪些表中?