mysql - 具有条件的常见事件的 SQL 平均值

标签 mysql sql case

我有一个事件表,其中参与者以逗号分隔的 ID 列表形式列出:

0,4,21,33,41

我正在尝试执行以下查询以仅在状态等于 1 时检索事件的平均参与者人数。

我准备了以下但不起作用,有人可以帮助我吗?

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

非常感谢

最佳答案

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

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

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

关于mysql - 具有条件的常见事件的 SQL 平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650622/

相关文章:

PHP/mysql 查询缺少行

mysql - 如何将数据库导入vagrant mysql?

sql - 布线数据库的数据库方案

sql - 从具有内部联接的 SQL 表中删除

MySQL 存储过程变量格式在 SELECT 语句中不起作用

mysql - 执行此选择和更新循环的更有效方法

要创建的脚本出现 SQL 错误

php - 这个 MySQL CASE SELECT 有更好的方法吗?

php - MySQL 'select WHERE like x OR y' 一行有多个结果

mysql - MySql 中 case 条件的内连接表