【问题标题】:How to count the length of column seperated by ',' after using group_concat [duplicate]使用group_concat后如何计算由','分隔的列的长度[重复]
【发布时间】:2019-09-09 22:08:58
【问题描述】:

我有一个如下表:

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 中复制一个查询: ' 选择 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。执行命令拒绝用户 'yb'@'%' 用于例程 'company.JSON_LENGTH'

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

【问题讨论】:

    标签: mysql sql group-concat


    【解决方案1】:

    实现这样的结果有一个非常常见的技巧,通过以下查询演示

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

    结果

    【讨论】:

    • 谢谢格罗。两种解决方案都有效
    【解决方案2】:

    如果我正确地关注了您,您可以简单地扩展现有查询的逻辑(顺便说一下,它似乎缺少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
    

    【讨论】:

    • 哦,你是对的。甜。
    • 我可以在这里问一个后续问题吗?如果我在路径列中有 Youtube、Youtube、时事通讯。我也可以在这里计算不同的频道吗?那么,取而代之的是 3,我如何在结果中得到 2?谢谢你! @GMB
    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多