现有这样一个需求:
在一个电商订单管理平台中,我想查看所有已付款订单中,哪些订单是有部分退款的。
一开始思路是这样是没错的:
在订单详情表里的num数量和大于退款详情表里的num数量之和即可,也就是SUM(nums)>SUM(num)。
为了达成这样的目的,我一开始在MySql里直接这样运行了,代码如下:
SELECT
soo.order_bn,
sooi.order_id,
sooi.nums,
sori.num
from sdb_ome_orders soo
left join sdb_ome_order_items sooi on sooi.order_id = soo.order_id
left join sdb_ome_reship sor on sor.order_id = soo.order_id
left join sdb_ome_reship_items sori on sori.reship_id = sor.reship_id
WHERE soo.shop_id = '52759ae5ccd9d10b9ad763cb78ec2c77'
and SUM(sooi.nums) > SUM(sori.num);
但是运行的结果发生了如下报错:
SQL Error [1111] [HY000]: Invalid use of group function。
单独注释掉最后一条,运行其他的是可以出来结果的。
所以where语句后面是不能使用sum聚合函数的,怎么办呢?
你可以单独用订单表连接订单明细表,把查询出来的结果定义为表A,将A里的nums求和设为a,
然后用订单表连接退款明细表,将查询出来的结果定义为表B,将B里的num求和设为