gpt4 book ai didi

MySQL 选择和分组

转载 作者:行者123 更新时间:2023-11-29 02:28:20 25 4
gpt4 key购买 nike

我是 SQL (mySQL) 的新手,我正在尝试创建一个专门填充谷歌图表的查询结果应如下所示:

      ['group_name', 'Open_tickets_count', 'closed_tickets_count'],
['Team A', 10, 400],
['Team B', 30, 460],
['Team C', 66, 1120],
['Team D', 5, 540]

我有一个包含以下字段的门票表:id ticket_status group_name。一些事情:

  1. 在这个例子中我只有两个状态,但是 状态实际上是可变的
  2. 团队的数量也是可变的
  3. 实际的 group_names 和 tickets_statuses 是其他人的 ID 我的真实表中的表。 (但我能想出如何替代)

我已经尝试了我的想象力和有限的知识所允许的一切,甚至没有接近实现这一目标。非常感谢任何帮助或指点。

谢谢。

[添加示例表结构(仅相关字段)]

Table: tickets
'id', 'int(10)'
'ticket_status_id', 'int(10)'
'ticket_group_id', 'int(10)'

Table: status
'id', 'int(10)'
'name', 'varchar(250)'

Table: groups
'id', 'int(10)'
'name', 'varchar(250)'

最佳答案

为了实现您的目标,您需要将条件 SUM()GROUP BY 和动态 SQL(PREPARE执行)。

您的基本脚本可能如下所示

SET @sql = '';
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN t.ticket_status = ''',
id,
''' THEN 1 ELSE 0 END) `',
name, '`'
)
) INTO @sql
FROM
status;

SET @sql = CONCAT
('SELECT g.name, ', @sql, '
FROM tickets t JOIN status s
ON t.ticket_status = s.id JOIN groups g
ON t.ticket_group_id = g.id
GROUP BY t.ticket_group_id, g.name'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这是 SQLFiddle 演示。

关于MySQL 选择和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17228465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com