[英]MySQL Count presence of multiple values in same column
我有一個名為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
謝謝!
如您現在所見,這只會導致問題。 請使用其他表格規范化數據庫結構
customer_products
CUSTID PRODUCTCODE
------ -----------
001 3
001 12
001 18
---
002 9
002 6
...
然后,您可以從customer
表中刪除PRODUCTCODE
列。
一種解決方案是將架構更改為具有兩列:
1)客戶ID 2)產品ID
因此數據看起來像這樣:
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;
希望這可以幫助。
如果您無法更改架構,則必須獲取數據,並且必須使用腳本語言按需處理數據。
嘗試這個:
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
根據需要更改類型,添加其他產品,添加說明等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.