Laravel:从mysql中获取通过和失败结果的总数
Laravel: Get count of total number of pass and fail results from mysql
我陷入了这个问题。我在数据库中有一个 table,其中 os_flash_result 可以是 PASS 或 FAIl。
我必须以带日期的图表形式显示失败和通过结果的数量。
我的table结构和数据如下:
mysql> select * from mobile_prod_pograms;
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
| id | device_id | os_flash_result | action | station | build_id | created_at | updated_at |
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
| 2 | 1 | FAIL | Mobile Production Prog | 1 | mp1 | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
| 19 | 1 | PASS | Mobile Production Prog | 1 | mp1 | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
| 20 | 1 | PASS | Mobile Production Prog | 1 | mp1 | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
3 rows in set (0.00 sec)
我正在使用 laravel,所以我编写了以下查询来获取通过结果的计数。
$mobile_chart_query = DB::table('mobile_prod_pograms')
->select(DB::raw('DATE(created_at) as date'), DB::raw('count(id) as total'))
->where('os_flash_result','=','PASS')
->where('created_at','>=','2018-09-17')
->groupBy('date')
->get();
以上查询运行良好。
但我想在使用 date.How 的单个查询中失败并传递结果计数,我可以实现吗?
任何帮助将不胜感激...
您可以使用条件聚合:
$mobile_chart_query = DB::table("mobile_prod_pograms")
->select(DB::raw("DATE(created_at) AS date"),
DB::raw("COUNT(CASE WHEN os_flash_result = 'PASS' THEN 1 END) AS pass_count"),
DB::raw("COUNT(CASE WHEN os_flash_result = 'FAIL' THEN 1 END) AS fail_count"))
->where("created_at", ">=", "2018-09-17")
->groupBy("date")
->get();
这对应于以下原始 MySQL 查询:
SELECT
DATE(created_at) AS date,
COUNT(CASE WHEN os_flash_result = 'PASS' THEN 1 END) AS pass_count,
COUNT(CASE WHEN os_flash_result = 'FAIL' THEN 1 END) AS fail_count
FROM mobile_prod_pograms -- should be called mobile_prod_programs
WHERE
created_at >= '2018-09-17'
GROUP BY
date;
我陷入了这个问题。我在数据库中有一个 table,其中 os_flash_result 可以是 PASS 或 FAIl。 我必须以带日期的图表形式显示失败和通过结果的数量。
我的table结构和数据如下:
mysql> select * from mobile_prod_pograms;
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
| id | device_id | os_flash_result | action | station | build_id | created_at | updated_at |
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
| 2 | 1 | FAIL | Mobile Production Prog | 1 | mp1 | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
| 19 | 1 | PASS | Mobile Production Prog | 1 | mp1 | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
| 20 | 1 | PASS | Mobile Production Prog | 1 | mp1 | 2018-09-27 00:00:00 | 2018-09-27 00:00:00 |
+----+-----------+-----------------+------------------------+---------+----------+---------------------+---------------------+
3 rows in set (0.00 sec)
我正在使用 laravel,所以我编写了以下查询来获取通过结果的计数。
$mobile_chart_query = DB::table('mobile_prod_pograms')
->select(DB::raw('DATE(created_at) as date'), DB::raw('count(id) as total'))
->where('os_flash_result','=','PASS')
->where('created_at','>=','2018-09-17')
->groupBy('date')
->get();
以上查询运行良好。 但我想在使用 date.How 的单个查询中失败并传递结果计数,我可以实现吗? 任何帮助将不胜感激...
您可以使用条件聚合:
$mobile_chart_query = DB::table("mobile_prod_pograms")
->select(DB::raw("DATE(created_at) AS date"),
DB::raw("COUNT(CASE WHEN os_flash_result = 'PASS' THEN 1 END) AS pass_count"),
DB::raw("COUNT(CASE WHEN os_flash_result = 'FAIL' THEN 1 END) AS fail_count"))
->where("created_at", ">=", "2018-09-17")
->groupBy("date")
->get();
这对应于以下原始 MySQL 查询:
SELECT
DATE(created_at) AS date,
COUNT(CASE WHEN os_flash_result = 'PASS' THEN 1 END) AS pass_count,
COUNT(CASE WHEN os_flash_result = 'FAIL' THEN 1 END) AS fail_count
FROM mobile_prod_pograms -- should be called mobile_prod_programs
WHERE
created_at >= '2018-09-17'
GROUP BY
date;