如果分组的项目范围很大,则按问题计算(不同)和分组

时间:2011-06-23 06:21:00

标签: mysql count group-by distinct

我正在加入两个表格(发货和退货)并使用分组来查看某些条件的总计。这两个表通过shipment_id相关。此列大多是唯一的,但包含一些重复项,因为每个货件可以包含多个也包含在表中的项目。

我正在尝试计算按仓库,卖家和尺寸分组的所有不同货件。 count(非常有效,但如果分组的项目范围很大,则与group by一起使用时不会报告正确的信息。

以下查询返回7个货件(已累计)4个退货(也已添加)。虽然有少量的测试数据我的返回计数是正确的,实际上有6个不同的货物,而不是7.有了这个查询我基本上看着所有货物并加入退货信息,如果货物中的物品已经返回。

select s.warehouse, s.seller, s.size,
count(distinct s.shipment_id) as total_shipments,
count(distinct r.shipment_id) as total_returns
from shipments s
left join returns r
on s.shipment_id = r.shipment_id
group by s.warehouse, s.seller, s.size

我担心我生成的报告不完全准确。这个问题有解决方法吗?我见过类似的问题,但没有一个真正适用。我正在使用MYSQL

1 个答案:

答案 0 :(得分:0)

我发现了潜在的问题。如果货物有多个物品并且可能最终出现重复的货物记录,则意味着货物可能来自不同的仓库或卖方,或者大小不同。通过按这些字段进行分组,您可能会因为货件的计算时间超过一次而结束,因为shipment_id在技术上与该组不同。

您可以尝试按s.shipment_id而不是s.warehouse, s.seller, s.size进行分组。这里的问题是,如果仓库,卖家或大小不同,你最终会错过一行(对于那个仓库/销售/大小),但总数会加起来。