【发布时间】:2011-07-12 11:45:46
【问题描述】:
我正在为我正在开发的应用程序编写一些相当复杂的查询报告。我可能可以通过使用更高级别的 PHP 来实现以下所有功能,但显然我想用 MySQL 来完成这一切,这显然会大大简化事情。
我需要的报告是一个典型的销售报告类型查询,它将列出人员列表,以及与他们相关的一些相关总数。唯一的细微差别是该系统与货运/运输有关,因此“销售人员”实际上是卡车司机,而“销售人员”是个人托运。此外,托运货物仅通过创建“路线”链接/绑定到各自的司机,该路线记录了谁在特定日期交付/收集了什么。
当然,我可以使用 INNER JOIN 来获取每个司机的列表,包括他们交付/收集的所有货物,并对这些货物的收入进行求和。但是,当我需要同时显示总交付收入和收款收入列时,问题就来了。这些数字可以来自consignments 表,该表列出了每批货物。每批货物都可以有一个标志(ENUM“D”,“C”),它表明它是交付还是收集。这几乎可以通过使用子查询轻松确定,但仍然会有很多重复。
到目前为止我所拥有的:
SELECT pr.driver_callsign, d.first_name, d.last_name, sum(pc.revenue) AS total_revenue
FROM pallet_routes AS pr
INNER JOIN drivers AS d ON d.driver_callsign = pr.driver_callsign
INNER JOIN pallet_consignments AS pc ON pc.route_id = pr.route_id
GROUP BY pr.driver_callsign
ORDER BY d.driver_callsign ASC
这显然会返回每个驱动程序的列表,以及与他们绑定的所有货物的总收入。
进一步拆分此revenue SUM 字段以显示SUM(revenue) WHERE type = "C" 和SUM(revenue) WHERE type="D" 的最有效方法是什么?子查询?联合?
还值得一提的是,结束查询将缩小到一个日期范围。因此,例如将有一个 WHERE date BETWEEN x AND y 放在 pallet_routes 表上。
我们将不胜接受任何建议。如果您希望我详细说明,请询问。
【问题讨论】: