我的桌子看起来像这样
我需要结果像
请注意,有时候我的表中有一个值,然后是“,”,然后是另一个值,有时是值,然后是“,”,然后是空格,然后是值,还有一些空值
答案 0 :(得分:0)
这将涉及一系列步骤。
假设您的记录如表1所示-
+-------------------------------+
| title |
+-------------------------------+
| sales,marketing,operations |
| sales |
| operations,project management |
| sales,operations |
| |
| , |
+-------------------------------+
第1步:创建临时表-
create temporary table temp( val char(255) );
第2步:动态创建sql语句
set @sql=concat("insert into temp (val) values ('", replace(( select group_concat(title) as t from table1), ",", "'),('"),"');");
第3步:准备SQL语句
prepare stmt1 from @sql;
第4步:执行上面创建的SQL语句
execute stmt1;
第5步:在SQL下运行以具有所需的输出-
select val, count(val) from temp group by val having val!=""
输出-
+--------------------+------------+
| val | count(val) |
+--------------------+------------+
| marketing | 1 |
| operations | 3 |
| project management | 1 |
| sales | 3 |
+--------------------+------------+
答案 1 :(得分:0)
另一个答案-
如果标题的值有限,请尝试对每个标题使用以下sql。
SELECT 'sales', SUM(ROUND((LENGTH(title)- LENGTH(REPLACE(title, "sales", "")) ) / LENGTH("sales"))) AS
个FROM table1;
输出-
+-------+-------+
| sales | count |
+-------+-------+
| sales | 3 |
+-------+-------+
显然,这会影响性能,但可以节省表创建特权。
答案 2 :(得分:0)
通过以下选择,您可以在逗号分隔的列中的所有行中获取所有值,并且可以使用ot进行所需的任何操作。这也可以在mysql 5.x版本上运行。
如果您的列中的单词数超过6个,则如果内部连接,则必须扩大rifgt视域
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(title, ',', n.digit+1), ',', -1) title
FROM
table1
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(title, ',' , '')) <= LENGTH(title)-n.digit;
给你
title
sales
sales
operations
sales
marketing
project management
operations
operations
还有
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(title, ',', n.digit+1), ',', -1) title, Count(*)
FROM
table1
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(title, ',' , '')) <= LENGTH(title)-n.digit
GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(title, ',', n.digit+1), ',', -1);
您得到
title Count(*)
sales 3
operations 3
marketing 1
project management 1
dbfiddle示例https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a3f5dc5f7b31f0270d595d2635a99a08