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;