问题描述
我在 SQL 中有一个家庭成员关系,我需要知道同一个家庭成员(一个 guid)是否多次出现。家人(也是向导)
我如何计算每个家庭 guid 中的家庭成员 guid - 或者甚至更好地只返回那些超过一个的家庭成员(意味着同一个人两次或更多)?
例如
家庭成员 | 家人 |
---|---|
7B815121-7D6F-EB11-A812-000D3A22E46A | 9617390F-7D6F-EB11-A812-000D3A22E46A |
7B815121-7D6F-EB11-A812-000D3A22E46A | 9617390F-7D6F-EB11-A812-000D3A22E46A |
1713A8C1-2E70-EB11-A812-000D3A22E46A | 9617390F-7D6F-EB11-A812-000D3A22E46A |
A773DFA2-8643-EB11-A812-000D3AACBC1D | 9617390F-7D6F-EB11-A812-000D3A22E46A |
A773DFA2-8643-EB11-A812-000D3AACBC1D | 0B80A44B-3470-EB11-A812-000D3A22E46A |
CB0647AC-4470-EB11-A812-000D3A22E46A | 0B80A44B-3470-EB11-A812-000D3A22E46A |
这里我应该只为 '7B815121-7D6F-EB11-A812-000D3A22E46A' 计数 2,因为其他匹配项来自不同的家族 GUID
解决方法
以下应返回每个 familymember
出现多次的 family
的计数:
SELECT familymember,COUNT(*)
FROM table
GROUP BY family,familymember
HAVING COUNT(*) > 1
给出:
家庭成员 | COUNT(*) |
---|---|
7B815121-7D6F-EB11-A812-000D3A22E46A | 2 |
每个 family
的完整计数(不仅仅是重复)只是:
SELECT family,familymember,familymember
家人 | 家庭成员 | COUNT(*) |
---|---|---|
0B80A44B-3470-EB11-A812-000D3A22E46A | A773DFA2-8643-EB11-A812-000D3AACBC1D | 1 |
0B80A44B-3470-EB11-A812-000D3A22E46A | CB0647AC-4470-EB11-A812-000D3A22E46A | 1 |
9617390F-7D6F-EB11-A812-000D3A22E46A | 1713A8C1-2E70-EB11-A812-000D3A22E46A | 1 |
9617390F-7D6F-EB11-A812-000D3A22E46A | 7B815121-7D6F-EB11-A812-000D3A22E46A | 2 |
9617390F-7D6F-EB11-A812-000D3A22E46A | A773DFA2-8643-EB11-A812-000D3AACBC1D | 1 |
试试这个
select Familymember,count(Family) as count from table_name group by Familymember,Family;
此查询的作用是使用两列进行分组,这意味着您将计算两列相同的行。