2013-07-29 136 views
0

我很確定這是一個非常簡單的問題,但我是新來的MySQL,所以我將不勝感激一些幫助.. 我想使用下面的表來計算多少次每個項目都爲每個ID進行註冊,並從那裏生成一個新表格,其中包含與每個不同項目(每個ID的計數向量)對應的列。因此,舉例來說,有這樣的:查詢在MySQL中計數

ID   ITEM 
----------------- 
0001  345 
0001  345 
0001  120 
0002  567 
0002  034 
0002  567 
0003  567 
0004  533 
0004  008 

我想這一點:

ID  008 034 120 345 533 567 
    ---------------------------------------------- 
    0001  0  0  1  2  0  0 
    0002  0  1  0  0  0  2 
    0003  0  0  0  0  0  1 
    0004  1  0  0  0  0  0 

謝謝

+0

ID應該是**唯一的**,如果它們不是唯一的,那麼它們不是ID! – Neal

+1

@Neal您可能會遇到這樣的情況,多行具有到另一個表的引用ID。例如,在我的訂單表中,我有多個用戶ID,因爲每個用戶可以有多個訂單。 –

+0

每個ID只對應一個客戶.. – user2578185

回答

0

從你問什麼略有不同,但在複雜的SQL更容易;

SELECT id, item, 
    (SELECT COUNT(item) FROM Table1 WHERE id=a.id AND item=a.item) cnt 
FROM (SELECT DISTINCT a.id,b.item FROM Table1 a, Table1 b) a 
ORDER BY id, item; 

這會爲每個元素而不是每個客戶創建一行,a'la;

ID ITEM CNT 
1 8  0 
1 34  0 
1 120  1 
1 345  2 
1 533  0 
1 567  0 
2 8  0 
2 34  1 
... 

上面的查詢對MySQL優化器來說不是很好,因此可能執行速度會很慢(id/item上的索引可能會有所幫助)。如果您不關心零列,那麼數據庫更容易;

SELECT id, item, COUNT(item) cnt 
FROM Table1 
GROUP BY id, item 
ORDER BY id, item; 

ID ITEM CNT 
1 120  1 
1 345  2 
2 34  1 
2 567  2 
3 567  1 
... 

這兩個都意味着在Python方面更多的工作,但避免了數據庫的複雜性。

An SQLfiddle with both in action