mysql - 查询中不同子串的计数

标签 mysql sql

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

我有一列是这样的:

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/

相关文章:

MySQL 将两行算作一行

php - 将 fetch all 数组拆分为单独的数组

mysql - 如何在 1 个变量 sql 中存储多个行集

C# UWP 查看两个数据库行

mysql - 如何在 NodeJS 中使用 MySQL @Session 变量?

php - 使用 AJAX post 从 MySQL 加载滚动内容

php - 如何在mysql存储过程中使用条件

sql - 数据库实现 DDL 和 DML 的方式有区别吗?

php - SQL 更新 - 如何切换?

php - mysql通过外键将主表与另一个表连接