如何计算使用 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 */
结果
我有一个 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 */
结果