查询中不同子字符串的计数

时间:2014-07-02 21:28:15

标签: mysql sql

我正在尝试创建一个计算(或至少检索)区分列中子字符串出现的查询。

我有一个列是这样的:

elem1 =值1 | elem2时=值2 | elem3 =值3

我想检索elem2的区别值和发生次数。

SELECT
    substring(
        column , LOCATE( 'elem2=' , column ) + $1 , $2 
    ) AS a ,
    COUNT(*) b ,
FROM
   column ORDER BY a;

由于

1 个答案:

答案 0 :(得分:3)

这是实现指定结果的一种方法。

<击>     SELECT COUNT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(t.col,&#39; elem2 =&#39;, - 1),&#39; |&#39;,1))       从T      在哪里,等待&#39;%elem2 =%&#39;

显然,我误读了这个问题(上面的查询返回了不同值的计数。或者,我只是忘记了指定的结果,而我正在处理繁琐的字符串解析。

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的列,并将每个单独的值存储在一列中。< / p>

例如:

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'