Laravel Query - только максимальная сумма за каждый день недели - PullRequest
1 голос
/ 04 мая 2019

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

Скажем, у нас было:

Order::join('order_items', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.paid', 1)
    ->groupBy('orders.paid_at')
    ->select(DB::raw(
        'orders.paid_at,
        DATE_FORMAT(orders.paid_at, \'%W\') AS week_day,
        SUM(order_items.amount) AS amount'
    ))->orderBy('amount', 'DESC');

Так было быв конечном итоге выведите

2019-04-29, Monday, £500
2019-01-01, Tuesday, £700
2019-02-06, Wednesday, £400
2019-01-03, Thursday, £600
2019-02-15, Friday, £200
2019-04-20, Saturday, £100
2019-03-17, Sunday, £600

Мой текущий запрос выбирается каждый понедельник, вторник, среду и выдает сумму для каждого вхождения.

Я хотел бы показать только наиболее эффективную дату для каждого издни недели (что дает нам 7 строк).

Есть ли способ обернуть запрос вокруг этого запроса для достижения того или иного способа?

1 Ответ

0 голосов
/ 04 мая 2019

Мне удалось получить ожидаемые результаты, я добавил один дополнительный столбец к выбору, чтобы иметь возможность сортировать дни, как ожидалось в конце. Решение не полностью MySQL, но с помощью методов сбора это легко сделать, я считаю. Поэтому, пожалуйста, попробуйте это и дайте мне знать.

Order::join('order_items', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.paid', 1)
    ->groupBy('orders.paid_at')
    ->select(DB::raw(
        'orders.paid_at,
        DAYNAME(orders.paid_at) AS week_day, // this function gives the same as formatting
        WEEKDAY(orders.paid_at) as day,
        SUM(order_items.amount) AS amount'
    ))->orderBy('amount', 'DESC')
      ->get()
      ->unique('week_day')->sortBy('day'); // this two will give the expected result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...