laravel - 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 行)。
有没有办法围绕这个查询包装一个查询来实现那个或其他方式?
解决方案
我设法产生了预期的结果,我在选择中添加了一个额外的列,以便能够在最后按预期对日期进行排序。解决方案不完全是 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
推荐阅读
- typescript - 如何使用 Angular 材料根据状态选择过滤地区列表
- python - Azure - AzureWebJobsStorage 的缺失值,即使它显然存在
- python - 调整 SVM OVO 和 OVA 中的超参数以进行多类分类
- javascript - 如何为嵌套的动态路由渲染 ember 模板?
- r - 尝试在 R 中制作雷达图并为两条不同的线着色时出现问题
- ruby-on-rails - 在 jupyter notebook 中 iruby 没有 bash 命令
- java - Angular/Java:管理基于时间的应用程序
- nlp - 什么是更自然的解析,导致句子的首选阅读
- arrays - 如何获取嵌套内部列表组的整个列表,并为它们添加排序和限制。MongoDB查询
- discord.js - 响应欢迎消息 discord.js