Сумма личиночной коллекции столбцов по месяцам - PullRequest
0 голосов
/ 05 июля 2019

Я работаю над проектом Laravel, где мне нужно получить некоторые данные, суммировать столбцы и сгруппировать результаты в формате My (Jan-19) для отображения на месячной диаграмме в виде столбчатой ​​диаграммы.

Я смог успешно собрать и сгруппировать данные, но проблема в том, что за месяцы без каких-либо записей я все еще хочу отображаться на графике с общим значением, равным 0.

Это мой текущий подход:

$data = $this->user->income()
              ->whereBetween('game_date', ['2019-01-01', '2019-04-30'])
              ->selectRaw('sum(total_score) as score,
                           sum(total_stars) as stars,
                           MONTH(game_date) as month,
                           DATE_FORMAT(game_date,"%b") as month_name
                          ')
              ->groupBy('month', 'month_name')
              ->get();

Это дает мне следующий результат (пропущенные месяцы без каких-либо записей):

[    
    {
        "score": "707",
        "stars": "64",
        "month": 1,
        "month_name": "Jan"
    },
    {
        "score": "200",
        "stars": "29",
        "month": 3,
        "month_name": "Mar"
    }
]

И ожидаемый результатвключая пропущенные месяцы для создания визуально четкого графика в виде:

[
    {
        "score": "707",
        "stars": "64",
        "month": 1,
        "month_name": "Jan"
    },
    {
        "score": "0",
        "stars": "0",
        "month": 2,
        "month_name": "Feb"
    },
    {
        "score": "200",
        "stars": "29",
        "month": 3,
        "month_name": "Mar"
    },
]

Обратите внимание, что ->whereBetween('game_date', []) всегда будет иметь даты с начала месяца и до конца месяца (охватывая полные месячные записи).

1 Ответ

0 голосов
/ 05 июля 2019

Вы должны использовать функцию COALESCE (). Это потому, что в феврале месяце вы получаете ноль в sum (total_score) как балл вместо 0. посмотрите на

здесь и здесь

надеюсь, это поможет

...