2013-07-29 2 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가있는 상황이있을 수 있습니다. 예를 들어, Orders 테이블에는 각 사용자가 여러 개의 주문을 가질 수 있으므로 여러 개의 UserID가 있습니다. –

+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; 

이렇게하면 고객 당 요소 대신 행이 만들어집니다.

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 
... 

위의 쿼리는 MySQLs optimizer에게는 좋지 않으므로 느리게 수행됩니다 (id/item에 대한 인덱스가 도움이 될 수 있음). 0 열에 신경 쓰지 않는다면 데이터베이스가 훨씬 쉽습니다.

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 
... 

두 가지 모두 파이썬 쪽에서 조금 더 많은 작업을 의미하지만 데이터베이스는 복잡하지 않습니다.

An SQLfiddle with both in action.