MySQL中的计数查询

MySQL中的计数查询,mysql,sql,database,Mysql,Sql,Database,我很确定这是一个非常简单的问题,但我是mysql的新手,所以我希望能得到一些帮助。。 我想使用下表来计算每个ID注册每个项目的次数,并从中生成一个新表,表中的列对应于每个不同的项目(每个ID的计数向量)。例如,有这样一个: ID ITEM ----------------- 0001 345 0001 345 0001 120 0002 567 0002 034 0002 567 0003

我很确定这是一个非常简单的问题,但我是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   

谢谢

与您要求的略有不同,但更容易使用复杂的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
...
上面的查询对MySQLs优化器来说不是很好,所以执行起来可能很慢(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方面需要做更多的工作,但避免了数据库的复杂性


.

ID应该是唯一的,如果它们不是唯一的,那么它们就不是ID@Neal您可能会遇到这样的情况,即多行具有指向另一个表的引用ID。例如,在我的订单表中,我有多个UserID,因为每个用户可以有多个订单。每个ID只对应一个客户。@General\u Twyckenham这似乎不像OP所要求的那样……MySQL中的动态字段名至少可以说不是很直截了当。为什么要这样的结构?