所以我有两张桌子。一种是人们拥有的股份数量:
Person_ID || Shares
1 || 100
2 || 150
3 || 315
4 || 75
5 || 45
...
另一个包含一个人是否存在的信息(有两列指定)以及他属于哪个组:
Person_id || barcode_presence || manual_presence || group_id
1 || NULL || 1 || NULL
2 || 1 || NULL || 1
3 || 1 || 0 || 2
4 || 0 || NULL || 1
5 || 1 || 0 || 1
...
我需要找出每个组中所有存在的总和和所有缺席的总和(NULL 组也是一个组)。
我无法弄清楚的是,通过两列(barcode_presence 和 manual_presence)的组合来确定此人是否在场:
如果 manual_presence = 1 --> 存在
else if (manual_presence = NULL andbarcode_presence = 1) --> 存在
其他一切都不存在。
这就是我到目前为止所得到的。
SELECT presence_list.Person_id, presence_list.person_name,
presence_list.barcode_presence, presence_list.manual_presence,
presence_list.group_id, people_data.Share
, sum(people_data.Share)
FROM presence_list
INNER JOIN people_data
ON presence_list.Person_id = people_data.Person_ID
WHERE meeting_id = 1 AND voting_id = 0
GROUP BY presence_list.group_id,
barcode_presence,
manual_presence
ORDER BY presence_list.group_id
;
但显然这并没有给我想要的结果。它按 group_id、barcode_presence 和 manual_presence 的每个可能组合进行分组,如下所示:
Person_id || barcode_presence || manual_presence || group_id || share || sum(shares)
1 || NULL || 1 || NULL || 100 || 100
2 || 1 || NULL || 1 || 150 || 150
4 || 0 || NULL || 1 || 75 || 75
5 || 1 || 0 || 1 || 45 || 45
3 || 1 || 0 || 2 || 315 || 315
所以我正在寻找一种方法来(在这种情况下)将 id 为 4 和 5 的人联系起来,因为它们都不存在并且来自同一组,如下所示:
Person_id || barcode_presence || manual_presence || group_id || share || sum(shares)
1 || NULL || 1 || NULL || 100 || 100
2 || 1 || NULL || 1 || 150 || 150
5 || 1 || 0 || 1 || 45 || **120**
3 || 1 || 0 || 2 || 315 || 315
我试过使用HAVING
子句,但我没有找到一种方法来处理复杂的表达式,比如manual_presence = 1 OR (manual_presence is null AND barcode_presence = 1)
任何想法或建议将不胜感激!预先感谢!