美好的一天。 让我们说我有一个像这样组织的桌子:
|ColA |
---------------
|AAA |
|AAA#!#BBB |
|BBB#!#CCC#!#DDD|
|AAA#!#DDD |
|DDD |
我想要实现的是计算每个字符串的出现次数,考虑到simbols"#!#"作为分隔符。
最好的应该是MySQL Count()
结果样式:
|count| |
|AAA |3 |
|BBB |2 |
|CCC |1 |
|DDD |3 |
是否可以在SQL语句中组合replace
和count
?是否可以将replace
结果用作表格来应用count
?
答案 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 强>