我正在尝试编写一个复杂的(至少对我而言)查询,该查询连接几个表以从“类次”(想想商店的收银员类次)表返回数据以及这些类次期间发生的交易总和特定商店。
我有一个包含以下信息的类次表
- 类次ID
- 收银员ID
- 开始时间
- 结束时间
包含此信息的交易表
- 交易ID
- 分支机构ID
- 金额
- 类次ID
包含此信息的收银台
- 收银员ID
- 商户ID
- 收银员姓名
包含此信息的分支表
- 分支机构ID
- 商户ID
我有一个如下所示的查询:
SELECT shifts.shiftID,
shifts.cashierID,
shifts.startTime,
cashiers.name as 'cashierName',
(SELECT sum(general_transactions.amount) from
general_transactions INNER JOIN shifts on
shifts.shiftID=general_transactions.shiftID
left join cashiers on cashiers.cashierID = shifts.cashierID
where general_transactions.amount > 0 AND shifts.endTime IS NOT NULL
and cashiers.merchantID=16) as 'loadUps'
from shifts LEFT JOIN cashiers on cashiers.cashierID =
shifts.cashierID where endTime is NOT NULL AND cashiers.merchantID = 16
所以基本上,这可以返回所有类次以及我需要的信息,但它会汇总每行中该商家的所有交易,而不仅仅是那些特定于该行中返回的类次的交易。
是否可以通过获取每个类次行的每个类次总计的方式进行查询?
最佳答案
如果您在语句中使用 SUM(或任何与此相关的聚合函数,例如 COUNT、AVG、MIN、MAX...),但不使用 GROUP BY 子句,则该函数将应用于整个结果集。这就是为什么您会得到所有交易的总和。
现在,SUM 位于您的内部查询中。如果您在其中添加 GROUP BY,那么您很可能会收到错误,因为将返回多个值。因此,您必须重新构造查询,也许取出 SUM 并将其与 GROUP BY 子句一起放入外部查询中。
PS:如果您创建一个 SQL fiddle 并填充一些数据,我很乐意尝试为您做这件事。
关于mysql - 如何在 MYSQL 中的多个表之间进行复杂的求和/计数连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615502/