关于count和group_by的奇怪问题,也许是截然不同的

时间:2012-09-17 14:47:28

标签: mysql sql sqlite

情景:

我有一个名为snippets的表,有5行, 我有一个名为revisions的表,有15行

我想要做的是获取所有代码段,其中包含user_id修订版snippet_id

我有以下mysql查询:

SELECT DISTINCT * FROM "snippets" 
INNER JOIN "revisions" 
    ON "user_id" = "1" 
    AND "snippet_id" = "snippets.id"
GROUP BY "snippets"."id" 
ORDER BY "created_at"

这应该显示revisions.user_id = 1所有的片段。问题是,为什么我的计数不同?该查询的总结果为 5 ,但是当我这样做时:

SELECT COUNT(distinct snippets.id) FROM "snippets" 
INNER JOIN "revisions" 
    ON "user_id" = "1" 
    AND "snippet_id" = "snippets.id"
GROUP BY "snippets"."id";

结果是 1 1 1 1 1

1 个答案:

答案 0 :(得分:2)

DISTINCT COUNT(*)没有意义。可能你正在寻找COUNT(DISTINCT someotherfield)而不是它。由于COUNT(*)包含NULL个值的任何行。

更新:* 请勿COUNT您在GROUP BY子句中使用的相同字段。这就是你得到结果1 1 1 1 1的原因。在这种情况下,请删除GROUP BY "snippets"."id"子句。