首先,有关表之间的关系:mysql - MySQL:如何执行包含已计算总和的多表查询?-LMLPHP

我正在尝试编写一个查询,该查询将检索:people_has_trips.people_personID,people_has_trips_tripID,研讨会名称,代理商和“金额”,该金额旨在是Trip表中给定条目的Payments表中所有条目的总数。这是相关的,因为该查询旨在在我正在构建的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;


返回以下内容:
mysql - MySQL:如何执行包含已计算总和的多表查询?-LMLPHP

因此,我们已经完成了大部分工作,最终版本显然会被清理掉(例如,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
;

10-04 21:34
查看更多