mysql - 如何在 MYSQL 中的多个表之间进行复杂的求和/计数连接

标签 mysql join

我正在尝试编写一个复杂的(至少对我而言)查询,该查询连接几个表以从“类次”(想想商店的收银员类次)表返回数据以及这些类次期间发生的交易总和特定商店。

我有一个包含以下信息的类次表

  • 类次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/

相关文章:

mysql - dovecot passdb 中的密码无效 : Not a valid MD5-CRYPT or PLAIN-MD5 password

php - 如何使用右连接与 MYSQL 案例获取两列的数据

mysql - 列出表 1 中的所有项目并填写表 2 中匹配的信息

mysql - 使用联接和分组依据从三个表中获取值

php - 使用 SQL 语句将三个表连接在一起以从每个表中获取数据

mysql - 如何在 Hibernate 中使用 MySql 内存存储引擎?

mysql - 如何根据同一行中的其他列值更新mysql表列

java - 运行 Hibernate Criteria 时,未按给定顺序创建 HQL 查询

mysql - 无需 SSH 隧道即可远程连接到 EC2 上的 MySQL

mysql - SQL Select - 某些行不会显示