Рассчитать MAX для каждой строки в SQL - PullRequest
0 голосов
/ 02 июля 2018

У меня есть эти таблицы:

  • Docenza(id, id_facolta, ..., orelez)
  • Facolta(id, ...)

и я хочу получить для каждой факолты только идентификатор Доценцы, который выполнил максимальное количество орелеса и количество орелеса:

id_docenzaP  facolta1   max(orelez)
id_docenzaQ  facolta2   max(orelez)
...
id_docenzaZ  facoltaN   max(orelez)

как я могу это сделать? Вот что я делаю:

SELECT DISTINCT ... F.nome, SUM(orelez) AS oreTotali
FROM Docenza D 
  JOIN Facolta F ON F.id = D.id_facolta
GROUP BY F.nome

Я получаю что-то вроде:

 docenzaP  facolta1   maxValueForidP
 docenzaQ  facolta1   maxValueForidQ
 ...
 docenzaR  facolta2   maxValueForidR
 docenzaS  facolta2   maxValueForidS
 ...
 docenzaZ  facoltaN   maxValueForFacoltaN

Как я могу взять только максимальное значение для каждого facolta?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

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

Это немного уродливо, и я уверен, что есть какой-то умный коррелированный подход подзапроса, но я никогда не был хорош с ними.

SELECT st.focolta,
       s_orelez,
       TMP3.id_docenza
  FROM some_table AS st
 INNER
  JOIN (SELECT * 
          FROM (SELECT focolta,
                       s_orelez,
                       id_docenza,
                       ROW_NUMBER() OVER -- Get the ranking of the orelez sum by focolta.
                         ( PARTITION BY focolta
                               ORDER BY s_orelez DESC
                         ) rn_orelez
                  FROM (SELECT focolta,
                               id_docenza,
                               SUM(orelez) OVER -- Sum the orelez by focolta
                                ( PARTITION BY focolta
                                ) AS s_orelez 
                          FROM some_table
                       ) TMP
               ) TMP2 
         WHERE = TMP2.rn_orelez = 1 -- Limit to the highest rank value
       ) TMP3
    ON some_table.focolta = TMP3.focolta; -- Join to focolta to the id associated with the hightest value.
0 голосов
/ 02 июля 2018

Предположительно, вы просто хотите:

SELECT F.nome, sum(orelez) AS oreTotali
FROM Docenza D JOIN
     Facolta F
     ON F.id = D.id_facolta
GROUP BY F.nome;

Я не уверен, что должен делать SELECT DISTINCT. Он почти никогда не используется с GROUP BY. . . . предполагает, что вы выбираете дополнительные столбцы, которые не нужны для желаемых результатов.

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