だから私は2つのテーブルを持っています。人々が持っている株式の量を持つもの:
Person_ID || Shares
1 || 100
2 || 150
3 || 315
4 || 75
5 || 45
...
もう 1 つは、人物が存在するかどうか (それを指定する 2 つの列があります) と、その人物が所属するグループの情報を示します。
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 グループもグループ) の存在するすべての共有の合計と存在しないすべての共有の合計を見つける必要があります。
私が把握できないのは、2 つの列 (barcode_presence と manual_presence) の組み合わせによって、その人が出席しているか不在であるかが判断されることです。
manual_presence = 1 の場合 --> 存在
それ以外の場合 (manual_presence = NULL および barcode_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)
アイデアや提案をいただければ幸いです。事前に感謝します!