我正在尝试创建一个查询,该查询计算(或至少检索)列中子字符串的不同出现次数。

我有一栏是这样的:

elem1 = value1 | elem2 = value2 | elem3 = value3

我想检索elem2的distinct值和出现的次数。

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
     t.col类似“%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并不是真正为从字符串中解析值而设计的。

这种类型的数据的规范关系模式将创建一个表,该表具有名为elem1elem2elem3的列,并将每个单独的值存储在列中。

例如:

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/

10-12 13:51