【问题标题】:Using the same Count twice in one sql select在一个 sql 选择中使用相同的 Count 两次
【发布时间】:2013-12-31 01:06:56
【问题描述】:
SELECT Person.name, Person.lastName, COUNT(DISTINCT childrenID) 
FROM Person, ParentChildren 
WHERE ParentChildren.parentID = ParentChildren.parentID 
AND Person.ID = ParentChildren.parentID 
GROUP BY COUNT(DISTINCT childrenID) DESC;

这显然行不通,因为我不擅长这个。 它应该做的是显示姓名,姓氏以及这个人有多少个孩子,从人开始,最多的孩子。

任何帮助将不胜感激:)

【问题讨论】:

    标签: mysql sql count sql-order-by


    【解决方案1】:

    您的 WHERE 语句不正确。而且你分组也不正确。您按未进行 SUM'd、COUNT'd 等的列分组。

    WHERE ParentChildren.parentID = ParentChildren.parentID 
    

    如果您将此切换到正确的表连接,那么您可能会得到您正在寻找的答案。 编辑:查看原理图后,我认为这就是你想要的:

    SELECT
      Person.name, 
      Person.lastName, 
      COUNT(DISTINCT ParentChildren.childrenID) 
    FROM Person, ParentChildren 
    WHERE 
      Person.ID = ParentChildren.parentID 
    GROUP BY 
      Person.name,
      Person.lastName
    ORDER BY
      COUNT(DISTINCT childrenID) DESC;
    

    如果您收到错误,可以发布吗?

    【讨论】:

    • WHERE ParentChildren.parentID = ParentChildren.parentID 与其他 GROUP BY 合作,所以我认为这是正确的。有没有其他方法可以说我需要两个具有相同值的字段?在这种情况下,同一个父级可以有多个孩子,因此有多个记录。
    • 好好想想它在做什么。就像说 WHERE 1=1 一样好,这总是正确的。你能发布你的表模式吗?没有它,我不知道你应该加入 parentID 还是 ID。
    • @TylerFerraro 它有效。非常感谢。老实说,你所做的对我来说就像魔术一样。
    • 查看如何连接表。您可以通过 WHERE 继续执行此操作,但最终使用复杂语句最好使用 LEFT JOIN、INNER JOIN 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多