具有条件的SQL平均逗号发生

时间:2018-06-01 20:30:17

标签: mysql sql case

我有一个事件表,其中partecipants被列为逗号分隔的ID列表:

0,4,21,33,41

我尝试执行以下查询,以便仅在status等于1时检索事件的平均partecipants数。

我准备了以下但是没有工作,任何人都可以帮助我吗?

SELECT avg(case when (status = 1 then LENGTH(REPLACE(listofPartecipants, ',', '')) end) avgPartecipants FROM events;

非常感谢

1 个答案:

答案 0 :(得分:1)

如果要计算列表中元素的数量,这是表达式:

SELECT avg(case when status = 1
                then LENGTH(REPLACE(listofPartecipants, ',', 'XX')) - length(listofPartecipants) + 1
           end) as avgPartecipants
FROM events;

比获得这种神秘的字符串逻辑更重要的是修复数据模型。您不应该在逗号分隔的列表中存储ID列表。你应该有一个表,每个事件和每个参与者一行。