2014-09-26 3 views
4

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

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); 

Но он не работает, как ожидалось. Не могли бы вы помочь мне решить эту проблему?

Update: Я мог бы сделать его работу с помощью:

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; 

Есть ли лучший способ, чем это?

ответ

5

Если вы ожидаете, что результат:

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) 
+0

Уважаемый Сильвен, благодарю вас. Ваш запрос довольно легко прочитать по сравнению с моим. Но я заметил, что перфоманс обоих запросов одинаковый. Есть ли лучший/эффективный способ? – user613114

+0

@ user613114 О характеристиках: мой первый, хотя и будет добавлять составной индекс на 'col2, col3, col4'. Но, не зная точно вашу структуру таблицы («ключи») и план выполнения, трудно сказать больше. Не стесняйтесь задавать другой вопрос! –

+0

Спасибо Сильвен за вашу помощь. Я сделаю это. – user613114

Смежные вопросы