【发布时间】:2016-08-27 20:11:33
【问题描述】:
我试图在 Laravel 应用程序中组合一个 SQL 查询来创建关于 customers、agents 和 orders 的报告,并且需要一些帮助。
我已经说明了我的数据库表,并从下面的架构中排除了不必要的字段:
客户表
---------------------------------------------
cust_id cust_name
---------------------------------------------
1 Joe
2 Allan
3 Rick
4 Bill
代理表
每个代理都通过一个 cust_id 外键与客户相关联:
---------------------------------------------
agent_id agent_name cust_id
---------------------------------------------
1 Mike 2
2 Arnold 4
3 Lucy 1
4 Tom 3
订单表
orders 表包含客户下的所有订单(由 cust_id 通过外键引用),包括订单日期和金额:
-----------------------------------------------
ord_id cust_id date amount
-----------------------------------------------
1 1 1/1/2001 50.00
2 1 1/1/2001 20.00
3 2 2/1/2001 20.00
4 4 2/1/2001 30.00
5 3 2/1/2001 75.00
6 3 3/1/2001 35.00
7 1 4/1/2001 20.00
8 3 5/1/2001 75.00
9 2 5/1/2001 10.00
期望的查询结果:
我想构建一个查询来检索每个客户的代理名称、最近销售日期、最近销售金额和总销售金额(按客户名称排序):
------------------------------------------------------------------
custName agentName LastSaleDate LastSaleAmt TotalSales
------------------------------------------------------------------
Allan Mike 10.00 5/1/2001 30.00
Bill Arnold 30.00 2/1/2001 30.00
Joe Lucy 20.00 4/1/2001 90.00
Rick Tom 75.00 5/1/2001 185.00
现状:
到目前为止,我已经创建了所有 laravel 模型并设置了 eloquent 关系,但怀疑上面的查询应该使用常规 SQL 而不是 ORM 来完成。
使用 SQL,我可以检索客户名称、代理名称和总销售额,但不能检索最后销售日期和最后销售额:
SELECT customers.name, agents.name, SUM(orders.amount) FROM customers
LEFT JOIN agents
ON customers.id=agents.cust_id
LEFT JOIN orders
ON customers.id=orders.cust_id
GROUP BY customers.id, agents.name
ORDER BY customers.name ASC
如何扩展此查询以包括最近的销售日期和金额?
感谢任何帮助!
【问题讨论】:
-
那么每个代理只有一个客户?
-
@Strawberry 是的,没错。
标签: mysql sql laravel join eloquent