MySQL中的计数查询
我很确定这是一个非常简单的问题,但我是mysql的新手,所以我希望能得到一些帮助。。 我想使用下表来计算每个ID注册每个项目的次数,并从中生成一个新表,表中的列对应于每个不同的项目(每个ID的计数向量)。例如,有这样一个: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
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中的动态字段名至少可以说不是很直截了当。为什么要这样的结构?