首页 > 解决方案 > Laravel 查询 - 只有一周中每一天的最高金额

问题描述

我正在尝试创建一个函数,该函数向我展示一周中每一天的最佳日子。

所以说我们有:

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 行)。

有没有办法围绕这个查询包装一个查询来实现那个或其他方式?

标签: laraveleloquent

解决方案


我设法产生了预期的结果,我在选择中添加了一个额外的列,以便能够在最后按预期对日期进行排序。解决方案不完全是 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

推荐阅读