MySQL: Как выполнить запрос к нескольким таблицам, включая вычисленную сумму? - PullRequest
0 голосов
/ 13 января 2020

Во-первых, отношения между рассматриваемыми таблицами: enter image description here

Я пытаюсь написать запрос, который получает: people_has_trips.people_personID, people_has_trips_tripID, seminarname, agent и «Сумма», которая предназначена для суммирования всех записей в таблице платежей для данной записи в таблице поездок. Это актуально, потому что этот запрос предназначен для использования в подчиненной форме в интерфейсе 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

Таким образом, мы прошли большую часть пути, очевидно, окончательная версия будет немного очищена ( seminID, например, не нужен), поэтому мой единственный вопрос: что мне нужно сделать, чтобы вместо «суммы», отображающей каждый отдельный платеж, это была сумма всех платежей за поездку?

Бонус: Острые глаза заметят, что «семинар» на самом деле является необязательным внешним ключом, и поэтому этот запрос, состоящий из внутренних объединений, исключает любую комбинацию людей и поездок, которая не включает семинар. Это не предназначено, и еще одну проблему мне нужно решить.

1 Ответ

1 голос
/ 13 января 2020

Извините за перестановку 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
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...