Найти максимальное значение в столбце для каждого раздела

У меня есть структура таблицы, как:

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)
Другие вопросы по тегам