如何在MySQL中使用聚合查询?

gmxoilav  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(124)

给定这两个表:

CREATE TABLE `file` (
  `id` int(11) NOT NULL,
  `file_name` varchar(255) NOT NULL,
  `is_base_found` tinyint(1) NOT NULL DEFAULT 0,
  `is_target_found` tinyint(1) NOT NULL DEFAULT 0,
  `last_run_date` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `statistics` (
  `id` int(11) NOT NULL,
  `file_id` int(11) NOT NULL,
  `status` varchar(8) NOT NULL utf8mb4_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

其中file_id是来自file表的引用。我的统计表有以下数据:
| 标识符|文件标识|状态|
| - -|- -|- -|
| 一个|一个|已通过|
| 2个|三个|失败的|
| 三个|三个|已通过|
| 四个|三个|已通过|
使用mysql查询如何在一个查询中获得通过的 status的计数,失败的状态的计数,file_id 的计数(如果不可能,最好的方法是什么)?到目前为止,我所做的就像查询每个状态:

SELECT f.*, COUNT(s.status)
  FROM file f
 INNER JOIN statistics s
    ON f.id = s.file_id
 WHERE r.status = "passed"
   AND f.file_name LIKE ?
 GROUP BY c.file_name

我期望的输出如下所示:
| 档案名称|通过数量|失败次数|运行次数|
| - -|- -|- -|- -|
| ZZZ文件|一个|第0页|一个|
| 范例档案|2个|一个|三个|

  • 任何帮助都是非常感谢!*
smtd7mpg

smtd7mpg1#

您似乎需要一个条件聚合,例如

SELECT c.file_name, 
       SUM(status='passed') AS `# Passed`, -- conditional counts
       SUM(status='failed') AS `# Failed`,
       COUNT(*) AS `# Run`                 -- total count
  FROM file f
  JOIN statistics s
    ON f.id = s.file_id
 GROUP BY c.file_name

相关问题