所以我有兩個表。一個與人們有股量:SQL查詢。需要GROUP BY兩列值的組合
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
...
我需要找出每一組中所有缺席股票的總和和總和(空值組也是一個組)。
我不能找出的事情是,該人是否存在或不存在是由兩列(barcode_presence和manual_presence)的組合計算出:
如果manual_presence = 1 - >本
else if(manual_presence = NULL and 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)
任何意見或建議將是複雜的表達式欣賞d!事先感謝!
您正在使用哪些DBMS?甲骨文? Postgres的? – 2013-02-12 14:17:20
我正在使用MySQL。 – Egor 2013-02-12 14:20:50