如何计算使用 group_concat 后以 ',' 分隔的列的长度

How to count the length of column seperated by ',' after using group_concat

我有一个 table 如下所示:

ID                  path                      
| 1               YouTube,Newsletter,Social  
| 2               YouTube,Newsletter         
| 3               YouTube                    

现在我想创建一个列来计算路径列的长度。如下所示:

ID                  path                      count    weights              
| 1               YouTube,Newsletter,Social     3        0.33
| 2               YouTube,Newsletter            2        0.5
| 3               YouTube                       1         1

我该怎么做?

我已尝试 JSON_LENGTH 但无法使命令正常工作。

PS。本质上,我试图在 PostgreSQL 中复制一个查询: ' select user_id, channels, 1.0 / array_length(channels, 1) 作为权重 从 ( // ... 像以前一样查询 marketing_channels)' 我正在使用 MYSQL。

select d.email_entry_id
      ,d.channels 
      ,JSON_LENGTH(d.channels) 
from (   
  select email_entry_id
       ,group_concat(attribution_string order by visit_date asc separator ',' ) as channels
  from database) d 

错误消息:错误代码:1370。对例程 'company.JSON_LENGTH'

的用户 'yb'@'%' 执行命令被拒绝

希望问题够清楚。如果我需要澄清任何事情,请告诉我。

如果我没听错,您可以简单地扩展现有查询的逻辑(顺便说一下,它似乎缺少 GROUP BY 子句)。与其查询聚合数据,不如从原始数据开始更简单,例如:

SELECT
  email_entry_id,
  GROUP_CONCAT(attribution_string ORDER BY visit_date SEPARATOR ',' ) as channels,
  COUNT(*) as `count`,
  1/COUNT(*) as weight
FROM database
GROUP BY email_entry_id

有一个非常常见的技巧可以实现这样的结果,如下查询所示

SELECT ID, PATH, 
        (LENGTH(PATH) - LENGTH(REPLACE(PATH, ',', ''))) + 1 COUNT 
FROM DATABASE /* OR WHATEVER IS THE TABLE NAME */

结果