我很确定这是一个非常简单的问题,但我是mysql的新手,所以我很感激帮助.. 我想使用下表来计算每个ID为每个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
谢谢
答案 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方面意味着更多的工作,但避免了数据库的大量复杂性。