sql查询:如何让父母没有孩子?

发布于 2024-11-28 02:15:28 字数 1463 浏览 4 评论 0原文

我有这个查询来获取我想要的第一个结果 post 早些时候,

SELECT parents.tag_id AS ParentID,
       parents.tag_name AS ParentName,
       COUNT(childs.tag_id) AS TotalChildren
FROM root_tags AS parents
    LEFT OUTER JOIN root_tags AS childs
        ON parents.tag_id = childs.parent_id
WHERE parents.parent_id IS NULL
GROUP BY parents.tag_id, parents.tag_name
ORDER BY parents.tag_id

它返回,

ParentID    ParentName  TotalChildren
3           Tagname-1   2
5           tagname-2   2
6           tagname-3   1
9           tagname-4   1
18          tagname-10  0
24          tagname-13  0
26          tagname-14  0
28          tagname-15  0

但我现在有另一个问题,因为我想返回根本没有孩子的父母,

ParentID    ParentName  TotalChildren
18          tagname-10  0
24          tagname-13  0
26          tagname-14  0
28          tagname-15  0

所以我尝试对此进行查询,

SELECT 
    parents.tag_id AS ParentID,
    parents.tag_name AS ParentName,
    COUNT(childs.tag_id) AS TotalChildren

FROM root_tags AS parents
    LEFT OUTER JOIN root_tags AS childs
    ON parents.tag_id = childs.parent_id

WHERE parents.parent_id IS NULL
AND COUNT(childs.tag_id) = '0'
GROUP BY parents.tag_id, parents.tag_name
ORDER BY parents.tag_id

但它返回一个错误<代码>#1111 -群组功能使用无效

如何修复?

I have this query to get the first result I want from this post earlier,

SELECT parents.tag_id AS ParentID,
       parents.tag_name AS ParentName,
       COUNT(childs.tag_id) AS TotalChildren
FROM root_tags AS parents
    LEFT OUTER JOIN root_tags AS childs
        ON parents.tag_id = childs.parent_id
WHERE parents.parent_id IS NULL
GROUP BY parents.tag_id, parents.tag_name
ORDER BY parents.tag_id

Which returns,

ParentID    ParentName  TotalChildren
3           Tagname-1   2
5           tagname-2   2
6           tagname-3   1
9           tagname-4   1
18          tagname-10  0
24          tagname-13  0
26          tagname-14  0
28          tagname-15  0

But I have another problem now as I want to return the parents that have not children at all,

ParentID    ParentName  TotalChildren
18          tagname-10  0
24          tagname-13  0
26          tagname-14  0
28          tagname-15  0

So I tried to make query into this,

SELECT 
    parents.tag_id AS ParentID,
    parents.tag_name AS ParentName,
    COUNT(childs.tag_id) AS TotalChildren

FROM root_tags AS parents
    LEFT OUTER JOIN root_tags AS childs
    ON parents.tag_id = childs.parent_id

WHERE parents.parent_id IS NULL
AND COUNT(childs.tag_id) = '0'
GROUP BY parents.tag_id, parents.tag_name
ORDER BY parents.tag_id

But it returns an error #1111 - Invalid use of group function

How can I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡淡の花香 2024-12-05 02:15:28

只需在原始查询中添加一个 HAVING 子句即可:

SELECT parents.tag_id AS ParentID,
       parents.tag_name AS ParentName,
       COUNT(childs.tag_id) AS TotalChildren
FROM root_tags AS parents
    LEFT OUTER JOIN root_tags AS childs
        ON parents.tag_id = childs.parent_id
WHERE parents.parent_id IS NULL
GROUP BY parents.tag_id, parents.tag_name
HAVING COUNT(childs.tag_id) = 0
ORDER BY parents.tag_id

您的问题是您尝试将 WHERE 子句与聚合和函数 (COUNT) 一起使用。但您应该在聚合之前使用 WHERE 过滤数据。 HAVING 用于过滤聚合后的结果。

Just add a HAVING clause to you original query:

SELECT parents.tag_id AS ParentID,
       parents.tag_name AS ParentName,
       COUNT(childs.tag_id) AS TotalChildren
FROM root_tags AS parents
    LEFT OUTER JOIN root_tags AS childs
        ON parents.tag_id = childs.parent_id
WHERE parents.parent_id IS NULL
GROUP BY parents.tag_id, parents.tag_name
HAVING COUNT(childs.tag_id) = 0
ORDER BY parents.tag_id

Your problem is that you tried to use WHERE clause with aggregation and function (COUNT). But you should use WHERE to filter the data before aggregation. HAVING is for filtering results after aggregation.

淡紫姑娘! 2024-12-05 02:15:28

将此部分更改

AND COUNT(childs.tag_id) = '0'
GROUP BY parents.tag_id, parents.tag_name

GROUP BY parents.tag_id, parents.tag_name
HAVING COUNT(childs.tag_id) = 0

Change this part

AND COUNT(childs.tag_id) = '0'
GROUP BY parents.tag_id, parents.tag_name

to

GROUP BY parents.tag_id, parents.tag_name
HAVING COUNT(childs.tag_id) = 0
浴红衣 2024-12-05 02:15:28

使用 HAVING 代替 WHERE,并在 GROUP BY

http://blog.cnizz.com/ 之后tag/mysql-error-1111/

这可能很有用。

Use HAVING instead of WHERE, and after GROUP BY

http://blog.cnizz.com/tag/mysql-error-1111/

This could be useful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文