【问题标题】:count number of elements in list mysql计算列表mysql中的元素数
【发布时间】:2021-03-09 09:38:17
【问题描述】:

我有一个表 tab 包含参与者以逗号分隔的 ID 列表列出的事件:1,5,6,24,124

仅当 resolution 等于 Completed 时,我才想获取事件的 AVG 参与者编号

这是我尝试过的:

SELECT avg(case when (resolution = 'Completed' then LENGTH(REPLACE(participants, ',', '')) end) participants FROM tab;

但它不起作用

【问题讨论】:

  • 请发布表格架构、示例数据和预期结果。
  • 听起来你想要有和没有逗号的长度差异。请注意,这是一个糟糕的设计,但我想你已经知道了

标签: mysql sql csv


【解决方案1】:

修复您的数据模型!将列表存储在字符串中是错误的,原因有很多:

  • 数字应该存储为数字而不是字符串。
  • Id 应正确声明外键关系,但在字符串中时这不起作用。
  • 列旨在存储单个值,而不是多个值。
  • SQL 的字符串处理能力很差。
  • SQL 具有用于存储列表的出色数据结构。它被称为

正确的做法是修复数据模型。有时,您会被其他人非常非常糟糕的数据模型所困。在这种情况下,您可以计算逗号的数量并添加一个:

SELECT AVG( 1 + LENGTH(participants) - LENGTH(REPLACE(participants, ',', ''))) as avg_participants
FROM tab
WHERE resolution = 'Completed';

但是,您真正的努力应该是修复数据模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2010-10-10
    • 2019-02-14
    相关资源
    最近更新 更多