sql максимум запроса кумулятивный - PullRequest
1 голос
/ 12 апреля 2020

у меня есть таблица A в mysql

+-------------------------+
| ID  Name Month  Salary  |
+-------------------------+
| 1  Joe   4      300     |
| 2  Kim   3     100      |
| 3  Moko  2     150      |
| 4   Loli  5     80      |
| 5  Tom   3    400       |
+-------------------------+

как мне узнать общее количество зарплат в месяц и на человека, который заработал максимум

пример

Joe = 4*300 = 1200
Kim = 300
Moko = 300
Loli = 400
Tom = 1200

Результат будет : 1200, 2

1200 - максимальная зарплата, и 2 - это люди, которые заработали, это Джо и Том

Ответы [ 3 ]

2 голосов
/ 12 апреля 2020

Вы можете вычислить все зарплаты total в подзапросе, а затем подсчитать количество вхождений каждого значения total, упорядочив по убыванию total с LIMIT 1, чтобы ограничить самое высокое значение:

SELECT total, COUNT(*) AS num
FROM (
  SELECT Month * Salary AS total
  FROM data
) t
GROUP BY total
ORDER BY total DESC
LIMIT 1

Вывод:

total   num
1200    2

Демонстрация по SQLFiddle

2 голосов
/ 12 апреля 2020

попробуйте, как показано ниже, используя подзапрос

    select max(salary),count(*) from (select name, sum(Month*Salary) as salary
    from data    group by name
    ) b where b.salary= 

   (select max(salary) from
   (select sum(Month*Salary) as salary
    from data    group by name
    )b
    )

Демонстрационная ссылка

1 голос
/ 12 апреля 2020
SELECT Month*Salary, COUNT(*)
FROM A WHERE Month*Salary = (SELECT MAX(Month*Salary)
                             FROM A)

Второй запрос даст вам максимальную заработную плату, а затем вы можете отфильтровать записи в таблице A, указав месяц * Зарплата, равный этой сумме.

...