Найти максимальное значение в столбце для каждого раздела
У меня есть структура таблицы, как:
CREATE TABLE new_test
( col1 NUMBER(2) NOT NULL,
col2 VARCHAR2(50) NOT NULL,
col3 VARCHAR2(50) NOT NULL,
col4 VARCHAR2(50) NOT NULL
);
У него есть данные:
col1 col2 col3 col4
0 A B X
1 A B Y
2 A B Z
1 C D L
3 C D M
Мне нужно найти значение col4, которое имеет максимальное значение для комбинации col2 и col3. например, мой результат должен быть:
col4
Z
M
Я попытался использовать аналитическую функцию оракула:
SELECT col4, MAX(col1) OVER (PARTITION BY col2, col3) FROM (
SELECT col2, col3, col4, col1
FROM new_test);
Но это не работает, как ожидалось. Можете ли вы помочь мне решить эту проблему?
Обновление: я мог заставить это работать, используя:
SELECT a.col4
FROM new_test a,
(SELECT col2,
col3,
col4,
MAX(col1) OVER (PARTITION BY col2, col3) AS col1
FROM new_test
) b
WHERE a.col2 = b.col2
AND a.col3 = b.col3
AND a.col4 = b.col4
AND a.col1 = b.col1;
Есть ли лучший способ, чем этот?
1 ответ
Решение
Если вы ожидаете этого результата:
col4
Z
M
Вы должны написать:
SELECT MAX(col4) AS col4 FROM new_test GROUP BY col2,col3
Это вернет максимальное значение, найденное в столбце col4
для каждой пары col2,col3
Если вам это нужно:
COL2 COL3 COL4
A B Z
C D M
Написать:
SELECT col2,col3,MAX(col4) AS col4 FROM new_test GROUP BY col2,col3
Наконец, если вам нужно:
COL1 COL2 COL3 COL4
2 A B Z
3 C D M
Есть много вариантов. Как этот:
SELECT col1,col2,col3,col4
FROM new_test
NATURAL JOIN (SELECT col2,col3,MAX(col4) AS col4
FROM new_test GROUP BY col2,col3)