2010-05-04 69 views
0

首先感到抱歉,我想不出更具描述性的標題。SQL - 計算每個字段A值的字段B值的集合

我想要做的就是下面只使用SQL:

我的琴絃,列表1,列表2和項目list3一些列表。

我有一個數據集包含兩個有趣的列,A和B.列A包含一個TransactionID和列B包含一個ItemID。

當然,可以有多行共享相同的TransactionID。

我需要捕捉那些具有至少一個項目ID在每一個交易列表(列表1 列表2 項目list3)。

我還需要計算每次交易會發生多少次。 [編輯]也就是說,計算每個TransactionID有多少個ItemIDs「,」Full Set「是list1中的任何元素與list2中的任何元素以及列表中的任何元素3

我希望賺了足夠的感覺,也許我就能用清醒的頭腦更好的解釋。

在此先感謝

+0

你對錶中的任何列或列還有某種主鍵或唯一約束嗎?或者可以有完全相同的重複行? – 2010-05-04 18:25:58

+1

什麼數據庫? SQL Server? MySQL的? – 2010-05-04 18:26:54

+1

是list1,list2和list3表,每行一個字符串?如果不是,那麼「字符串列表」是什麼意思? 此外,我不明白「我還需要計算每次交易會發生多少次」。計算每次交易會發生多少次? – 2010-05-04 18:41:26

回答

0

在MySQL中,如果你h AVE以下列表:

list1 = ('1', '3') 
list2 = ('2', '3') 
list3 = ('3', '5') 

,那麼你可以這樣做:

SELECT 
    TransactionID, 
    SUM(ItemID IN ('1', '3')) AS list1_count, 
    SUM(ItemID IN ('2', '3')) AS list2_count, 
    SUM(ItemID IN ('3', '5')) AS list3_count 
FROM table1 
GROUP BY TransactionID 
HAVING list1_count > 0 AND list2_count > 0 AND list3_count > 0 

結果:

TransactionId list1_count list2_count list3_count 
1    3   2   1 
3    2   2   1 

測試數據:

CREATE TABLE table1 (ID INT NOT NULL, TransactionID INT NOT NULL, ItemID INT NOT NULL); 
INSERT INTO table1 (ID, TransactionID, ItemID) VALUES 
(1, 1, 1), 
(2, 1, 2), 
(3, 1, 3), 
(4, 1, 4), 
(5, 1, 1), 
(6, 2, 1), 
(7, 2, 2), 
(8, 2, 1), 
(9, 2, 4), 
(10, 3, 3), 
(11, 3, 2), 
(12, 3, 1); 
0

根據您的方言,並假設您的列表是其他表...

SELECT 
    TransactionID, Count1, Count2, Count3 
FROM 
    MyDataSet M 
    JOIN 
    (SELECT COUNT(*), ItemID AS Count1 FROM List1 GROUP BY ItemID) T1 ON T1.ItemID = M.ItemID 
    JOIN 
    (SELECT COUNT(*), ItemID AS Count2 FROM List2 GROUP BY ItemID) T2 ON T2.ItemID = M.ItemID 
    JOIN 
    (SELECT COUNT(*), ItemID AS Count3 FROM List3 GROUP BY ItemID) T3 ON T3.ItemID = M.ItemID 
0

如果列表1,列表2,和list3實際上是已知的枚舉,你可以用:

SELECT TransactionID, COUNT(*) 
FROM MyTable 
WHERE ItemID IN (list1) AND ItemID IN (list2) AND ItemID IN (list3) 
GROUP BY TransactionID 

如果您有很多列表,您可能想要在程序中生成SQL。但是,即使對於很多列表來說,它仍應該表現相當不錯。把你期望的匹配最少的列表放在第一位,以便儘快停止評估謂詞。

如果你的列表是在另一個表中,也許是一堆形式爲(list_id,item_id)的元組,這是一個棘手的問題。在嘗試爲此提出查詢之前,我想知道更多。