2016-04-12 60 views
1

實施例的數據:如何由一個列組,並返回IFNULL對於其它列

event_id, session_id, did_tap_on_screen 
1   1   true 
2   1   false 
3   2   false 
4   2   false 

期望的結果:

session_id, did_tap_on_screen 
1   true 
2   false 

基本上,我想組由SESSION_ID和did_tap_on_screen返回true如果有,則返回false如果全部爲假

這是我寫的僞查詢:

SELECT 
    session_id, 
    did_tap_on_screen -- what should I do here 
FROM events 
GROUP BY session_id 
+0

請與您正在使用的數據庫標記您的問題。第二列是什麼數據類型? –

回答

1

如果did_tap_on_screen是一個字符串,你可以這樣做:

select session_id, max(did_tap_on_screen) 
from events 
group by session_id; 

如果是(某些類型的)一個布爾值,然後將合適的配方取決於數據庫。例如,Postgres的支持bool_or()

select session_id, bool_or(did_tap_on_screen) 
from events 
group by session_id; 
+0

嘿我正在使用的數據庫是vertica。我應該使用哪些關鍵字來查找使用的功能?數據類型是布爾值。 – samol

+1

@samol。上面的第一個解決方案工作您只需將'did_tap_on_screen'轉換爲整數:'... max(did_tap_on_screen :: integer)'。這將返回0/1而不是false/true。如果您希望在輸出中將false max /()返回布爾值:'... max(did_tap_on_screen :: integer):: boolean',則返回false。 – mauro

0

這裏有一個方法來確定至少一個did_tap_on_screensession_id是否爲真:

select session_id, 
    count(case when did_tap_on_screen then 1 end) > 0 
from events 
group by session_id 
相關問題