MySQL计算在单元格中显示为列表的数据的出现次数

时间:2015-01-20 15:40:04

标签: mysql replace count

美好的一天。 让我们说我有一个像这样组织的桌子:

|ColA         |
---------------
|AAA            |
|AAA#!#BBB      |
|BBB#!#CCC#!#DDD|
|AAA#!#DDD      |
|DDD            |

我想要实现的是计算每个字符串的出现次数,考虑到simbols"#!#"作为分隔符。 最好的应该是MySQL Count()结果样式:

|count|   |
|AAA  |3  |
|BBB  |2  |
|CCC  |1  |
|DDD  |3  |

是否可以在SQL语句中组合replacecount?是否可以将replace结果用作表格来应用count

1 个答案:

答案 0 :(得分:0)

这样的事情可以解决问题:

<强> SCHEMA

CREATE TABLE TableA
    (`id` int, `ColA` varchar(255));    
INSERT INTO TableA
    (`id`, `ColA`)
VALUES
    (1, 'AAA'),
    (2, 'AAA#!#BBB'),
    (3, 'BBB#!#CCC#!#DDD'),
    (4, 'AAA#!#DDD'),
    (5, 'DDD');


CREATE TABLE TableB
    (`id` int, `Name` varchar(255));    
INSERT INTO TableB
    (`id`, `Name`)
VALUES
    (1, 'AAA'),
    (2, 'BBB'),
    (3, 'CCC'),
    (4, 'DDD');

<强> QUERY

SELECT col, SUM(count) as count 
FROM
  (SELECT
      t2.Name as col,
      ROUND (   
          (
              CHAR_LENGTH(t1.ColA)
              - CHAR_LENGTH( REPLACE (t1.ColA, t2.Name, "") ) 
          ) / CHAR_LENGTH(t2.Name)        
      ) as count    
  FROM TableA as t1
  INNER JOIN TableB as t2) as SubB 
GROUP BY col, count
HAVING count > 0;

<强> SQL FIDDLE