【问题标题】:Counting entries where relationship to each other is not determined计数未确定相互关系的条目
【发布时间】:2011-11-16 17:09:53
【问题描述】:

我想计算我的数据库中所有与一个人都有指定关系的条目列表,但我需要根据它们彼此之间的关系来计算 - 换句话说,他们被列为家里主要人的儿子和女儿,兄弟姐妹 - 我需要计算兄弟姐妹的数量。

我的方法是尝试计算所有有多个儿子或女儿的家庭,或任何有儿子和女儿的家庭,或任何有兄弟和姐妹的家庭,多于一个兄弟或多于一个姐妹。但是,当我尝试将其放入 SQL 中时,我却一无所获。

SELECT FirstName, Surname 
FROM individuals
WHERE (RelationshipToHead = 'Son' AND RelationshipToHead = 'Daughter') 
   OR (RelationshipToHead = 'Son' AND RelationshipToHead = 'Son') 
   OR (RelationshipToHead = 'Daughter' AND RelationshipToHead = 'Daughter') 
   OR (RelationshipToHead = 'Brother' AND RelationshipToHead = 'Sister') 
   OR (RelationshipToHead = 'Sister' AND RelationshipToHead = 'Sister') 
   OR (RelationshipToHead = 'Brother' AND RelationshipToHead = 'Brother')

这仅返回包含儿子女儿兄弟或姐妹的所有条目 - 而不是每个家庭中每个人都超过一个的条目。

您能建议一个更好的查询吗?

【问题讨论】:

    标签: php sql count relationships


    【解决方案1】:

    where 子句仅比较每一行中的值,这就是您的查询未按您希望的方式运行的原因。我建议:

    SELECT count(distinct AddressID) HouseholdsWithSiblings, 
           sum(NumberOfSiblings) TotalSiblings
    FROM   (SELECT AddressID, count(*) NumberOfSiblings 
            FROM individuals
            WHERE RelationshipToHead in ('Son','Daughter')
            GROUP BY AddressID
            HAVING count(*) > 1
            UNION ALL
            SELECT AddressID, count(*)+1 NumberOfSiblings 
            FROM individuals
            WHERE RelationshipToHead in ('Brother','Sister')
            GROUP BY AddressID) v;
    

    【讨论】:

    • 谢谢马克,这只是把那些列为兄弟姐妹的人扔了,我需要的回报只是数字。
    • @staceym,这是否意味着查询正在返回您需要的内容?如果没有,缺少什么?您需要每个家庭的兄弟姐妹数量,还是有多个兄弟姐妹的家庭数量?
    • 我需要兄弟姐妹的总数,所以它不需要特别的名字或姓氏,我只是用它来确保我知道的两个条目是唯一的孩子没有出现在结果中。感谢您的帮助。
    • @staceym,我从您之前的问题中看到,个人表包含一个唯一标识家庭的 AddressID。我已经相应地更新了我的查询 - 我认为这应该返回您正在寻找的内容,但请告诉我。
    • 那是表别名;某些类型的 SQL(包括 MySQL)在内联视图之后需要它们,而另一些则不需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2011-10-22
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多