MYSQL получение итоговой суммы столбца - PullRequest
0 голосов
/ 17 марта 2019

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

Это то, что у меня есть:

(SELECT Coach.name AS Name, COUNT(*) AS 'Shows Attended In March', 
dailySalary AS 'Daily Salary', sum(dailySalary) AS 'Total Salary' 
FROM Coach, TVShow, CoachInShow 
WHERE monthname(dateOfShow)='March' AND 
Coach.idCoach=CoachInShow.idCoach AND TVShow.idShow = 
CoachInShow.idShow 
GROUP BY Coach.name, Coach.dailySalary)

UNION

(SELECT Participant.name AS Name, COUNT(*) AS 'Shows Attended In 
March', dailySalary AS 'Daily Salary', sum(dailySalary) AS 'Total 
Salary'
FROM Participant, TVShow, Contender, ContenderInShow
WHERE monthname(dateOfShow)='March' AND Participant.idContender = 
Contender.idContender AND Contender.idContender = 
ContenderInShow.idContender AND ContenderInShow.idShow = TVShow.idShow
GROUP BY Participant.name, Participant.dailySalary);

Я пытался использовать GROUP BY WITH ROLLBACK для всего, но это не такдобавить только столбцы TotalSalary.Я потратил некоторое время на это и немного озадачил.

Я вставил сюда данные о том, с чем я работаю: https://www.db -fiddle.com / f / gPKVQrZCMkvHUqViAUzCqZ / 0 http://sqlfiddle.com/#!9/535f6d/1

1 Ответ

0 голосов
/ 17 марта 2019

Поместите UNION в подзапрос.В основном запросе суммируйте все подсчеты и общую зарплату и используйте WITH ROLLUP, чтобы получить общую сумму.

Вам не нужно dailySalary в предложении GROUP BY, поскольку оно функционально зависит отID.

SELECT name AS Name, SUM(count) AS `Shows Attended in March`, SUM(totalSalary) AS `Total Salary`
FROM (
    SELECT Coach.name, COUNT(*) AS count, SUM(dailySalary) AS totalSalary
    FROM Coach
    JOIN CoachInShow ON Coach.idCoach=CoachInShow.idCoach
    JOIN TVShow ON TVShow.idShow = CoachInShow.idShow 
    WHERE monthname(dateOfShow)='March'
    GROUP BY Coach.idCoach

    UNION

    SELECT Participant.name, COUNT(*) AS count, SUM(dailySalary) AS totalSalary
    FROM Participant
    JOIN Contender ON Participant.idContender = Contender.idContender 
    JOIN ContenderInShow ON Contender.idContender = ContenderInShow.idContender
    JOIN TVShow ON ContenderInShow.idShow = TVShow.idShow
    WHERE monthname(dateOfShow)='March'
    GROUP BY Participant.idParticipant
) AS x
GROUP BY Name
WITH ROLLUP

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...