MySQL:如何执行包含计算总和的多表查询?

标签 mysql relational-database inner-join

首先,相关表之间的关系:enter image description here

我正在尝试编写一个查询,该查询检索:people_has_trips.people_personID、people_has_trips_tripID、研讨会名称、代理和“金额”,该金额旨在作为旅行中给定条目的付款表中所有条目的总和 table 。这是相关的,因为该查询旨在在我正在构建的 Access 前端的子表单中使用。简单来说,这个查询的概念是:这个人去过哪次旅行,每次旅行总共花了多少钱?

这是我到目前为止的代码:

SELECT 
    people_has_trips.people_PersonID,
    people_has_trips.trips_tripID,
    people_has_trips.seminar_seminarID,
    seminar.seminarname,
    agentref.agent,
    payments.amount
FROM
    (seminar
    INNER JOIN (((trips
    INNER JOIN people_has_trips ON trips.tripID = people_has_trips.Trips_tripID)
    INNER JOIN payments ON trips.tripID = payments.trips_tripID)
    INNER JOIN agentnotes ON trips.tripID = agentnotes.Trips_tripID) ON seminar.seminarid = people_has_trips.seminar_seminarid)
        INNER JOIN
    agentref ON trips.agentref_agentid = agentref.agentid;

返回以下内容:
Query Result

所以我们已经完成了大部分工作,显然最终版本将被清理一点(例如,seminarID 是不必要的),所以我唯一的问题是:我需要做什么,而不是“金额” “显示每笔单独付款,这是一次旅行所有付款的总和?

奖励:敏锐的人会注意到“研讨会”实际上是一个可选的外键,因此这个由内部联接组成的查询排除了不包括研讨会的人员和旅行的任何组合。这不是我想要的,也是我需要解决的另一个问题。

最佳答案

很抱歉重新安排了 SQL,但在重新安排之前我很难理解正在发生的事情。

如果您对付款金额以外的列进行GROUP BY,则可以使用SUM等聚合函数来获取付款总额。

SELECT 
    people_has_trips.people_PersonID,
    people_has_trips.trips_tripID,
    people_has_trips.seminar_seminarID,
    seminar.seminarname,
    agentref.agent,
    SUM(payments.amount)
FROM seminar
INNER JOIN people_has_trips
    ON
    people_has_trips.seminar_seminarid = seminar.seminarid
INNER JOIN trips
    ON
    people_has_trips.Trips_tripID = trips.tripID
INNER JOIN payments
    ON
    trips.tripID = payments.trips_tripID
INNER JOIN agentnotes
    ON
    agentnotes.Trips_tripID = trips.tripID
INNER JOIN agentref
    ON
    agentref.agentid = trips.agentref_agentid
GROUP BY
    people_has_trips.trips_tripID,
    people_has_trips.people_PersonID,
    people_has_trips.seminar_seminarID,
    seminar.seminarname,
    agentref.agent
;

关于MySQL:如何执行包含计算总和的多表查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59719758/

相关文章:

php - 单选按钮仅将 1 个值插入 SQL 数据库

swift - 如何在 Core Data 中插入具有多对多关系的对象? swift 3/Xcode 8

mysql - 使用同一行的值更新表

java: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '?' 附近使用的正确语法

php - 使用从数据库动态创建的输入字段更新 mysql 中的表

mysql - MariaDB:我可以在不使用 'AS' 的情况下检索重复的列名吗

MySQL 距离关系的传递闭包

sql - 关系索引数据库包装器

mysql - 通过仅获取最高整数行来内部连接单行

mysql - 在 SQL 表之间加入