首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -计数用逗号分隔的项目

MYSQL -计数用逗号分隔的项目
EN

Stack Overflow用户
提问于 2017-06-29 18:38:48
回答 1查看 1.3K关注 0票数 0

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

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

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

例如,使用这些行:

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

那么预期的计数将是6。

我找不到正确的查询。

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 18:52:06

好的,这是测试数据:

代码语言:javascript
复制
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)。

代码语言:javascript
复制
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()忽略NULLs。

代码语言:javascript
复制
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,这会更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44832660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档