如何使用MySQL';s COUNT()正确吗?

如何使用MySQL';s COUNT()正确吗?,mysql,sql,database,Mysql,Sql,Database,我正在尝试获取一个用户id(uid)的列表,其中发布了3篇以上的文章。以下是我的sql: SELECT n.uid FROM node GROUP BY n.uid HAVING COUNT( n.type = 'article' ) > 3 在读了一些书之后,我猜我的错误是使用了COUNT,但我无法找出我做错了什么。有什么提示吗?谢谢你 更像是 SELECT uid FROM node WHERE type = 'article' GROUP BY uid HAVING COUNT(u

我正在尝试获取一个用户id(uid)的列表,其中发布了3篇以上的文章。以下是我的sql:

SELECT n.uid
FROM node
GROUP BY n.uid
HAVING COUNT( n.type = 'article' ) > 3
在读了一些书之后,我猜我的错误是使用了COUNT,但我无法找出我做错了什么。有什么提示吗?谢谢你

更像是

SELECT uid
FROM node
WHERE type = 'article'
GROUP BY uid
HAVING COUNT(uid) > 3
编辑:我将添加更多关于
何处
拥有
的信息。就我所记得的,
HAVING
用于通过
groupby
应用聚合后条件<代码>其中通常用于将条件应用于表。

更像

SELECT uid
FROM node
WHERE type = 'article'
GROUP BY uid
HAVING COUNT(uid) > 3
SELECT n.id, COUNT(n.id) as my_count
FROM node
WHERE n.type = 'article'
GROUP BY n.id
HAVING my_count > 3
编辑:我将添加更多关于
何处
拥有
的信息。就我所记得的,
HAVING
用于通过
groupby
应用聚合后条件
其中
通常用于将条件应用于表。

COUNT()只能对分组结果中的分组记录或列进行计数;它不能用于按您希望的方式计算满足条件的记录。尝试对表达式进行子查询,或将其拉入可在以下条件中使用的选择列表:

SELECT n.id, COUNT(n.id) as my_count
FROM node
WHERE n.type = 'article'
GROUP BY n.id
HAVING my_count > 3
SELECT n.uid, COUNT(*)
FROM node n
WHERE n.type = 'article'
GROUP BY n.uid
HAVING COUNT(*) > 3

SELECT n.uid
FROM node n
WHERE (SELECT COUNT(*) from node n2 where n2.uid = n.uid AND n.type == 'article')  > 3
COUNT()只能对分组结果中的分组记录或列进行计数;它不能用于按您希望的方式计算满足条件的记录。尝试对表达式进行子查询,或将其拉入可在以下条件中使用的选择列表:

SELECT n.uid, COUNT(*)
FROM node n
WHERE n.type = 'article'
GROUP BY n.uid
HAVING COUNT(*) > 3

SELECT n.uid
FROM node n
WHERE (SELECT COUNT(*) from node n2 where n2.uid = n.uid AND n.type == 'article')  > 3
因为MySQL中的TRUE=1和FALSE=0(正如Richard所解释的),您的查询只需将
COUNT
更改为
SUM
,就可以工作(!):

SELECT n.uid
FROM node n
GROUP BY n.uid
HAVING SUM( n.type = 'article' ) > 3
但这不是正确的方法

HAVING COUNT( n.type = 'article' ) > 3
因为MySQL中的TRUE=1和FALSE=0(正如Richard所解释的),您的查询只需将
COUNT
更改为
SUM
,就可以工作(!):

SELECT n.uid
FROM node n
GROUP BY n.uid
HAVING SUM( n.type = 'article' ) > 3
但这不是正确的方法

HAVING COUNT( n.type = 'article' ) > 3
为什么这不起作用(回复:我无法找出我做错了什么):

  • n.type='article'
    为什么这不起作用(回复:我无法找出我做错了什么):


    • n.type='article'
      -1 for
      COUNT()只能计算列名,不能计算条件。
      它可以计算条件,例如
      COUNT(Case when..then 1 else NULL end)
      。。。这不是他最初的习惯;他希望以与.NET Linq类似的方式使用Count(),其中返回谓词为true的元素数。我会澄清,但请删除你的否决票。当我真的否决时,我不会用-1(通常不是)作为序言-我只是感情用事,但是有人做了。无论如何,您的编辑会导致一个非常糟糕的查询。(第二个,因此根据其他答案,不确定第一个工作时为什么会提供它)-1 for
      COUNT()只能计算列名,不能计算条件。
      它可以计算条件,例如
      COUNT(Case when..then 1 else NULL end)
      。。。这不是他最初的习惯;他希望以与.NET Linq类似的方式使用Count(),其中返回谓词为true的元素数。我会澄清,但请删除你的否决票。当我真的否决时,我不会用-1(通常不是)作为序言-我只是感情用事,但是有人做了。无论如何,您的编辑会导致一个非常糟糕的查询。(第二个答案,因此不确定第一个答案起作用时为什么会提供,根据其他答案)不要忘记选择答案:)。不要忘记选择答案:)。