我有一个名为Customers的表,其中包含CustID列,另一个名为ProductCode。有33种可能的产品(编号为1至33),每个客户可以有任何产品组合。每个客户都有一行,每个客户拥有的所有产品都显示在ProductCode列中,其间有空格,即:
CUSTID PRODUCTCODE
------ -----------
001 3 12 18 22 32
002 9 6 18 36
003 3 6 7 26
004 9 11 33
005 6 21 28 29 30 31
006 1 3 6 21 30 31
我需要能够对每个产品进行统计并添加代码的文本说明:
ProdCode Description Count
~~~~~~~~ ~~~~~~~~~~~ ~~~~~
1 Lawnmower 1
3 Spade 3
6 Clippers 4
etc
谢谢!
答案 0 :(得分:0)
如您所见,这只会导致问题。请使用附加表格标准化您的数据库结构
customer_products
CUSTID PRODUCTCODE
------ -----------
001 3
001 12
001 18
---
002 9
002 6
...
然后,您可以从PRODUCTCODE
表中删除customer
列。
答案 1 :(得分:0)
一种解决方案是将架构更改为包含两列: -
1)客户ID 2)产品标识
所以数据看起来像这样: -
cust_id| product_id
001 | 3
001 | 6
002 | 9
... ...
所以现在在mysql查询中你可以使用像
这样的查询Select product_id,count(*) as num_products from table_name group by product_id;
希望这有帮助。
如果您无法更改架构,则必须获取数据并使用脚本语言,您必须根据需要对其进行处理。
答案 2 :(得分:0)
试试这个:
CREATE TABLE ord (custid VARCHAR(3), productcode VARCHAR(40));
INSERT INTO ord VALUES ('001', '3 12 18 22 32');
INSERT INTO ord VALUES ('002', '9 6 18 36');
INSERT INTO ord VALUES ('003', '3 6 7 26');
INSERT INTO ord VALUES ('004', '9 11 33');
INSERT INTO ord VALUES ('005', '6 21 28 29 30 31');
INSERT INTO ord VALUES ('006', '1 3 6 21 30 31');
CREATE TABLE products (code VARCHAR(2));
INSERT INTO products VALUES ('3');
INSERT INTO products VALUES ('12');
INSERT INTO products VALUES ('18');
INSERT INTO products VALUES ('22');
INSERT INTO products VALUES ('32');
INSERT INTO products VALUES ('9');
INSERT INTO products VALUES ('6');
INSERT INTO products VALUES ('31');
CREATE TABLE ord_prod (code VARCHAR(2), count_of_products INT) AS
SELECT p.code,
(SELECT COUNT(1)
FROM ord o
WHERE INSTR(CONCAT(' ', o.productcode, ' '), CONCAT(' ', p.code, ' ')) > 0) AS count_of_products
FROM products p;
检查SQLFiddle:http://sqlfiddle.com/#!2/a7f94/1
根据需要更改您的类型,添加其余产品,添加说明等。