MySQL GROUP BY 每个逗号分隔值

标签 mysql sql

在任何人评论之前,我没有用逗号分隔值设计这个数据库:) 我花了很多时间试图找到答案,但我所能找到的只是 GROUP_CONCAT(),它似乎与我想要的相反。

我想对逗号分隔值字段中的每个值进行 GROUP BY。

SELECT round(avg(DATEDIFF( dateClosed , dateAded ) * 1.0), 2) AS avg, department
FROM tickets GROUP BY assignedto

assignedto字段是逗号分隔值字段

row1 54,69,555
row2 54,75,555
row3 75,555

期望输出:分配给字段分组的每个值的平均四舍五入数字。

编辑 - 尝试将其提升到一个新的水平: 我想包含工单答案表以获得该工单的第一个响应,使用它的日期时间字段计算出每个用户的平均响应时间。

SELECT a.id as theuser, round(avg(DATEDIFF( ta.dateAded , t.dateAded ) * 1.0), 2) as avg
FROM tickets t join
     mdl_user a
     on find_in_set(a.id, t.assignedto) > 0
INNER JOIN (SELECT MIN(ta.dateAded) as started FROM ticketanswer GROUP BY ta.ticketId) ta ON t.id = ta.ticketId
GROUP BY a.id ORDER BY avg ASC

最佳答案

哎呀。假设您知道分配的最大数量,您可以这样做。这是一种方法:

select substring_index(substring_index(assignedto, ',', n.n), ',', -1) as assignedto,
       round(avg(DATEDIFF( dateClosed , dateAded ) * 1.0), 2) as avg
from tickets t join
     (select 1 as n union all select 2 union all select 3)
     on length(assignedto) - length(replace(assignedto, ',', '')) < n.n
group by substring_index(substring_index(assignedto, ',', n.n), ',', -1);

或者,如果您有一个分配值列表,则更简单的方法是在 AssignedTo 表中:

select a.assignedto, round(avg(DATEDIFF( dateClosed , dateAded ) * 1.0), 2) as avg
from tickets t join
     assignedto a
     on find_in_set(a.assignedto, t.assignedto) > 0
group by a.assignedto;

很抱歉您必须处理这种格式错误的数据库结构。

关于MySQL GROUP BY 每个逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293178/

相关文章:

sql - 帮助解决约束

mysql - 使用 CASE 将值与用户 ID 对齐

java - type2 的 mysql 数据库的驱动程序名称和 url 是什么

mysql - 有没有办法在单个查询中选择不同并与相关子查询相交?

php - Mysqli_Query -> 插入错误

sql - 试图了解sql查询中的 "except all"

mysql - 将双重嵌套查询转换为 JOIN 语句,以及其他优化

sql - 在数据库中组织大量带时间戳的值(sql/nosql)

SQLAlchemy 中的 MySQL 语句

python - 由于编码而比较哈希值时出错