SQL 以 3 个数据分组
SQL grouping with 3 data
我认为我需要的不是那么复杂,但我已经花了几天时间研究 SQL 查询。
这是我的基本table结构
id | status | date
1 | active | 2020-01-02
2 | complete | 2020-01-03
3 | complete | 2020-01-03
4 | active | 2020-01-03
我试图在我的查询中获得这个结果,将结果按 date
分组,然后计算以下
total - based on total row count by date,
active - based on active status by date,
complete - based on complete status by date
下面是我想要的格式
[
{
total: 1,
active: 1,
completed: 0,
date: "2020-01-02"
},
{
total: 3,
active: 1,
completed: 2,
date: "2020-01-03"
}
]
这在 Laravel 上运行,我正在尝试使用 Eloquent 以及查询生成器
但没有成功
$leadReport = Lead::select(
DB::raw('count(id) as `total`'),
//DB::raw('count(CASE WHEN `status` = `active ) as `active`'),
//DB::raw('count(CASE WHEN `status` = `complete`) as `completed`'),
DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d') as date")
)->where('iso','au')->groupBy('date')->orderBy('date')->get();
return $leadReport;
感谢任何帮助
编辑
只是想感谢@Yazan 使用 SUM
推荐的查询,
我设法在 laravel 查询生成器上使用它,如下所示
$leadSummary = Lead::select(
DB::raw("Sum(CASE WHEN status = 'completed' AND json_unquote(json_extract(`lenders`, '$.current_status')) IN ('Settled', 'Funded') THEN 1 ELSE 0 END) AS settled"),
DB::raw("Sum(CASE WHEN status = 'completed' AND json_unquote(json_extract(`lenders`, '$.current_status')) NOT IN ('Settled', 'Funded') THEN 1 ELSE 0 END) AS rejected"),
DB::raw("Sum(CASE WHEN status = 'active'THEN 1 ELSE 0 END) AS active ")
)->where('iso','au')->get();
像这样使用 sum
而不是 count
SELECT Count(id) AS total,
Sum(CASE
WHEN status = 'active' THEN 1
ELSE 0
END) AS active,
Sum(CASE
WHEN status = 'completed' THEN 1
ELSE 0
END) AS completed,
Date_format(date, '%Y-%m-%d') AS date
FROM MYtable
GROUP BY date
ORDER BY date;
我认为我需要的不是那么复杂,但我已经花了几天时间研究 SQL 查询。
这是我的基本table结构
id | status | date
1 | active | 2020-01-02
2 | complete | 2020-01-03
3 | complete | 2020-01-03
4 | active | 2020-01-03
我试图在我的查询中获得这个结果,将结果按 date
分组,然后计算以下
total - based on total row count by date,
active - based on active status by date,
complete - based on complete status by date
下面是我想要的格式
[
{
total: 1,
active: 1,
completed: 0,
date: "2020-01-02"
},
{
total: 3,
active: 1,
completed: 2,
date: "2020-01-03"
}
]
这在 Laravel 上运行,我正在尝试使用 Eloquent 以及查询生成器 但没有成功
$leadReport = Lead::select(
DB::raw('count(id) as `total`'),
//DB::raw('count(CASE WHEN `status` = `active ) as `active`'),
//DB::raw('count(CASE WHEN `status` = `complete`) as `completed`'),
DB::raw("DATE_FORMAT(created_at, '%Y-%m-%d') as date")
)->where('iso','au')->groupBy('date')->orderBy('date')->get();
return $leadReport;
感谢任何帮助
编辑
只是想感谢@Yazan 使用 SUM
推荐的查询,
我设法在 laravel 查询生成器上使用它,如下所示
$leadSummary = Lead::select(
DB::raw("Sum(CASE WHEN status = 'completed' AND json_unquote(json_extract(`lenders`, '$.current_status')) IN ('Settled', 'Funded') THEN 1 ELSE 0 END) AS settled"),
DB::raw("Sum(CASE WHEN status = 'completed' AND json_unquote(json_extract(`lenders`, '$.current_status')) NOT IN ('Settled', 'Funded') THEN 1 ELSE 0 END) AS rejected"),
DB::raw("Sum(CASE WHEN status = 'active'THEN 1 ELSE 0 END) AS active ")
)->where('iso','au')->get();
像这样使用 sum
而不是 count
SELECT Count(id) AS total,
Sum(CASE
WHEN status = 'active' THEN 1
ELSE 0
END) AS active,
Sum(CASE
WHEN status = 'completed' THEN 1
ELSE 0
END) AS completed,
Date_format(date, '%Y-%m-%d') AS date
FROM MYtable
GROUP BY date
ORDER BY date;