![](/img/trans.png)
[英]Laravel eloquent: Only retrieve entries where relationship has entries (join)
[英]Counting entries where relationship to each other is not determined
我想计算数据库中所有与一个人有特定关系的条目列表,但我需要按它们之间的关系进行计数-换句话说,它们被列为主要对象的儿子和女儿,兄弟姐妹家里的人-我需要计算兄弟姐妹的数量。
我的方法是尝试计算所有有一个或多个儿子或女儿的家庭,或任何有一个儿子和女儿的家庭,或有一个兄弟和一个姐妹,一个或多个兄弟或一个以上的姐妹的家庭。 但是,当我尝试将其放入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')
这仅返回包含儿子,兄弟或姐妹的所有条目-而不是每个家庭中每个都有一个以上的条目。
您能提出一个更好的查询吗?
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.