0

それは非常に単純な質問だと確信していますが、私はmysqlを初めて使用するので、助けていただければ幸いです..次の表を使用して、各アイテムが各IDに登録された回数を数えたいと思います.そこから、個別の各アイテム (ID ごとのカウント ベクトル) に対応する列を含む新しいテーブルを生成します。たとえば、次のようにします。

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   

ありがとうございました

4

1 に答える 1

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

上記のクエリは、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 側での作業が少し増えることを意味しますが、データベースの複雑さを大幅に回避できます。

両方が動作している SQLfiddle

于 2013-07-29T18:19:39.453 に答える