2016-04-10 21 views
0

假設我有一張表,我們稱之爲SQL Server中的代表用戶購買的購買表。在SQL Server中如何從類似於歷史記錄的表中獲取一些有意義的數據?

Table name: purchase 
purchase_id  buyer_member_id  song_id 
1     101     1001 
2     101     1002 
3     102     1001 
4     102     1003 
5     103     1001 
6     103     1003 
7     103     1004 

現在我試着從這張表中做出一些統計。我想知道是誰購買了兩首歌曲1001和1003

select distinct buyer_member_id from purchase where 
buyer_member_id in (select buyer_member_id from purchase where song_id = 1001) 
and buyer_member_id in (select buyer_member_id from purchase where song_id = 1003) 

這個工作,但是當我們添加越來越多的標準方程,它變得越來越慢。幾乎不可能做一些類似的研究,找到購買a,b和c但不是d和f的人。據我瞭解,這個性質和用途「,其中someid中(從表,其中一些選擇someid)可能不是做的最好辦法。

的問題是,有沒有更好的辦法?

回答

1

我稱之爲「設置中之集」的查詢,並且喜歡用group byhaving接近他們。

select buyer_member_id 
from purchase p 
group by buyer_member_id 
having sum(case when song_id = 1001 then 1 else 0 end) > 0 and 
     sum(case when song_id = 1003 then 1 else 0 end) > 0; 

sum()計數每首歌曲相匹配的採購數量的> 0說,至少有1. = 0會說沒有。

+0

謝謝!我不知道這個關鍵詞有幫助! – shawhu

相關問題