mysql 关联查询从表的聚合函数
本例可查看erp租赁订单模块。
题目: 要求查询以下数据,其中出库总数和签收总数均为从表。
关系:(租赁订单和出库单(1:n),出库单和签收单(1:1))
因为一对多的关系,所以出库单中一定存有租赁单的单号。
目的: 我们想通过一个sql将以下数据和出库总数丶签收总数一起查出。
那么我们可以使用连接子查询的方式得出,出库和签收总数。
列:
SELECT *,delivery_order2 .outbound_total_quantity
FROM lease_order
LEFT JOIN enum e on lease_order.status
= e.no
LEFT JOIN enum ee on lease_order.type = ee.no
LEFT JOIN client on lease_order.client_no = client.no
LEFT JOIN agent on agent.no
= lease_order.agent_no
LEFT JOIN enum eee on lease_order.lease_form = eee.no
LEFT JOIN enum eeee on lease_order.business_type = eeee.no
LEFT JOIN enum eeeee on lease_order.recycling_from = eeeee.no
LEFT JOIN user
u on lease_order.create_id = u.id
LEFT JOIN user
uu on lease_order.audit_id = uu.id
LEFT JOIN (
SELECT
delivery_order.source_no,
SUM(
outbound_order.outbound_total_quantity
) AS outbound_total_quantity
FROM
delivery_order
LEFT JOIN outbound_order ON delivery_order.no
= outbound_order.source_no
GROUP BY delivery_order.source_no
) as delivery_order2 on delivery_order2.source_no = lease_order.no
通过以上方式就可以将每一条租赁单对应的所有出库单的总数查询出来,签收单同理!
(其中注意,要使用分组,否则得出的聚合函数将会是关联查询得出的全部出库单的出库数量总和,因为我们想要的是每一条租赁订单下面的所有出库的综合,所以我们就可以按照出库单中的租赁单号分组。)
目的:查询指定租赁订单下的每条明细下的出库数量的总和。
(这里可以采用笨方法,就是先将明细单的其他属性查询出来,空于出库数量不查。然后再代码中循环遍历刚得到的明细list,循环内每次只查询一条明细对应的出库数量然后再赋值即可,)
思路根据销售单号和sku查询出该明细单下的所有出库单明细的数量,然后再求综合。