получение связанных значений с макс sql - PullRequest
0 голосов
/ 13 марта 2019

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

SELECT StageName, MAX(TotalSalary)
FROM (
        SELECT StageName, SUM(DailySalary) AS TotalSalary
        FROM CONTENDER, PARTICIPANT
        WHERE idContender = Contender
        GROUP BY idContender
    ) AS AllContenders;

Это дает мне строку с максимальной зарплатой, но это просто дает имя для первой строки, а не правильную строку, что мне нужно найти

+-------------+-------------+
| StageName   | TotalSalary |
+-------------+-------------+
| Life        |        2600 |
| Death       |        6000 |
| AC/DC       |       16000 |
| Yin         |        2700 |
| Yang        |        3300 |
| Error Group |        1337 |
+-------------+-------------+

Это то, что я получаю с помощью среднего оператора выбора.

То, что я получаю с полным кодом, это жизнь и 16000, то, что я должен получить, это ACDC и 16000

1 Ответ

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

Прежде всего, вы группируете по idContender, но выбираете StageName, что дает вам случайное StageName для каждой группы idContender вместо того, чтобы останавливать вас с ошибкой (проблема только для MySql).Поэтому вместо выбора StageName, SUM(DailySalary) в подзапросе вам нужно выбрать idContender, SUM(DailySalary).Наконец, вы можете изменить свой подзапрос на объединенный запрос с помощью CONTENDER, а с помощью order by и limit вы можете выбрать первую запись с самым высоким TotalSalary:

SELECT t1.*, t2.TotalSalary as MaxSalary
FROM CONTENDER t1 join (
        SELECT idContender, SUM(DailySalary) AS TotalSalary
        FROM CONTENDER, PARTICIPANT
        WHERE idContender = Contender
        GROUP BY idContender
    ) AS t2
on t1.id = t2.idContender
order by MaxSalary desc
limit 1
...