MySQL 选择和分组

标签 mysql sql

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

      ['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 上的 table 。 (但我可以弄清楚如何替代)

我已经尝试了我的想象力和有限的知识所允许的一切,但距离实现这一点还差得很远。任何帮助或指示将不胜感激。

谢谢。

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

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/

相关文章:

mysql - 如何将总和转换为时间 - mysql

mysql - 如何处理 mysql #1062 - 创建大表时出现重复条目​​错误

mysql - 如何在 Ubuntu 中访问 PHPMyAdmin?

sql - NOT IN(子查询)产生零行

sql - 如何在 ALTER TABLE 后正确运行 ALTER VIEW

mysql - SQL 打印所有员工的姓名及其主管的姓名

mysql - EJB/Hibernate 不访问 MySQL 数据库

c++ - 使用 MysqlConnector/C 还是 MysqlConnector/C++?

mysql - 查询一对多关系 where 条件

SQL Server - UPDATE 语句中的 JOIN