查询以逗号分隔的列表中的出现

时间:2016-01-21 11:20:32

标签: mysql

我有一个表,其中一列可能包含逗号分隔值,例如

| Date ...........| Methods .....|
-
| 2014/10/01 .|  A ................|
-
| 2014/11/01 .|  C ................|
-
| 2014/08/01 .|  A,B .............|
-
| 2015/09/01 .|  C ................|
-
| 2015/11/01 .|  C, A ............|
-

我想输出一个基于年份和方法的计数摘要,以便生成的结果为

**2014: A = 2,  B = 1, C = 1** and **2015: A = 1, B = 0, C = 2**

因此,如果没有逗号分隔列表,它将是一个简单的组,但是对于列表,这将导致A,B被视为单独的条目而不是A和B的+1。这可能吗?< / p>

我希望这是有道理的,并且&#39;表&#39;很清楚。

1 个答案:

答案 0 :(得分:-1)

尝试使用SPLIT_STR函数及以下查询:

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

查询:

SELECT DATE_FORMAT(date,'%Y'),SPLIT_STR(dats,',',1) AS m1, SPLIT_STR(dats,',',2) AS m2
FROM tablename
GROUP BY date, Methods