MYSQL - 以逗号分隔的计数项目

时间:2017-06-29 18:38:49

标签: mysql

我有一个tinytext字段,可以包含3个不同的值,格式如下:

  • NULL
  • “X”或“Y”(其中X和Y可以是任何数字)
  • “A,B,C,D”(其中A,B,C和D可以是任意数字)

我想查询表格并用逗号计算分隔或不分隔的项目数。

例如,这些行:

  • 42
  • NULL
  • 42,56,99
  • 24,10090

然后预期的数量为6。

我找不到正确的查询。

1 个答案:

答案 0 :(得分:1)

好的,这是测试数据:

mysql> create table t (f tinytext);
mysql> insert into t values ('42'), (null), ('42,56,99'), ('24,10090');
mysql> select * from t;
+----------+
| f        |
+----------+
| 42       |
| NULL     |
| 42,56,99 |
| 24,10090 |
+----------+

您可以计算字符串中的数字,即字符串长度与删除逗号的字符串的差异(列表中第一个数字加1)。

mysql> select f, length(f), length(replace(f,',','')), 1+ length(f)-length(replace(f,',','')) from t;
+----------+-----------+---------------------------+----------------------------------------+
| f        | length(f) | length(replace(f,',','')) | 1+ length(f)-length(replace(f,',','')) |
+----------+-----------+---------------------------+----------------------------------------+
| 42       |         2 |                         2 |                                      1 |
| NULL     |      NULL |                      NULL |                                   NULL |
| 42,56,99 |         8 |                         6 |                                      3 |
| 24,10090 |         8 |                         7 |                                      2 |
+----------+-----------+---------------------------+----------------------------------------+

然后使用SUM()来获得总数。 SUM()忽略NULL。

mysql> select sum(1+length(f)-length(replace(f,',',''))) from t;
+--------------------------------------------+
| sum(1+length(f)-length(replace(f,',',''))) |
+--------------------------------------------+
|                                          6 |
+--------------------------------------------+

如果你don't store comma-separated lists in a string,这会更容易。