我正在尝试创建一个查询来计算(或至少检索)列中某个子字符串的不同出现次数。
我有一列是这样的:
elem1=value1|elem2=value2|elem3=value3
我想检索 elem2 的不同值和出现次数。
SELECT
substring(
column , LOCATE( 'elem2=' , column ) + $1 , $2
) AS a ,
COUNT(*) b ,
FROM
column ORDER BY a;
谢谢
最佳答案
这是实现指定结果的一种方法。
<罢工> 选择计数(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(t.col,'elem2=',-1),'|',1)) 从T WHERE t.col LIKE '%elem2=%' 罢工>
显然,我误解了这个问题(上面的查询返回了不同值的计数。或者,我只是在进行繁琐的字符串解析时忘记了指定的结果。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.col,'elem2=',-1),'|',1) AS a
, COUNT(*) AS b
FROM t
WHERE t.col LIKE '%elem2=%'
GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(t.col,'elem2=',-1),'|',1)
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(t.col,'elem2=',-1),'|',1)
注意:
请注意,SQL 并不是真正为解析字符串中的值而设计的。
此类数据的规范关系模式将创建一个表,其中的列名为 elem1
, elem2
, elem3
, 并将每个单独的值存储在一列中。
例如:
CREATE TABLE t
( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
, elem1 VARCHAR(80)
, elem2 VARCHAR(80)
, elem3 VARCHAR(80)
);
INSERT INTO t (elem1, elem2, elem3) VALUES ('value1', 'value2', 'value3');
获取 elem2
中不同值的计数专栏,我们会做这样的事情。
SELECT COUNT(DISTINCT elem2)
FROM t
获取 elem2 的不同值以及出现次数
SELECT elem2 AS a
, COUNT(*) AS b
FROM t
GROUP BY elem2
ORDER BY elem2
这与我回答开头的查询基本相同;第一个查询只需要解析 'elem2=value2'
在字符串之外。
关于mysql - 查询中不同子串的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541321/