работал как шарм!

я есть такая таблица, где, предположим, для примера,NAME это уникальный идентификатор.

NAME    AGE         VALUE
Jack    Under 65    3
Jack    66-74       5 
John    66-74       7
John    Over 75     9
Gill    25-35       11

НесколькоNAMEу них более одногоAGE, что нежелательно, так как это связано с загрязненностью данных.

Моя цель - обновить дубликаты только для того, чтобыAGE в каждомNAME, Таким образом, желаемый результат:

NAME    AGE         VALUE
Jack    Under 65    3
Jack    Under 65    5 
John    66-74       7
John    66-74       9
Gill    25-35       11

Что-то вроде этого оператора UPDATE должно работать, но это не так.

UPDATE table t1
SET t1.age=MAX(t1.age)
WHERE EXISTS (SELECT COUNT(t2.AGE)
              FROM table t2
              WHERE t1.NAME=t2.NAME
              GROUP BY t2.NAME
              HAVING COUNT(t2.AGE) > 1)

SQL Error: ORA-00934: group function is not allowed here

Второй выпуск

Даже если я получу вышеприведенное утверждение, есть вторая проблема. Идея в том, чтобы использоватьMAX (или жеMIN) функция на строках, чтобы установить одинаковое значение для всех повторов в группе.

Но, к сожалению, это тоже не совсем работает, как хотелось бы. Для согласованности, в идеале, возрастом будет по умолчанию самая низкая возрастная группа. Но потому чтоMAX/MIN сравните алфавитный порядок на строках, это дало бы, например:

"66-74" и "до 65 лет" => MAX = "до 65 лет" - самое низкое«66-74» и «более 75» => MAX = «более 75» - наивысший

Есть только четыре возрастные группы, можно ли будет указать индивидуальный заказ?

NB1: Я использую Oracle SQL.NB2: Я не против, если есть способ достичь результата, используя SELECT вместо оператора UPDATE.

Воспроизводимый пример

SELECT 'Jack' as NAME, 'Under 65' as AGE, 3 as VALUE from dual
UNION ALL
SELECT 'Jack' as NAME, '66-74' as AGE, 5 as VALUE from dual
UNION ALL
SELECT 'John' as NAME, '66-74' as AGE, 7 as VALUE from dual
UNION ALL
SELECT 'John' as NAME, 'Over 75' as AGE, 9 as VALUE from dual
UNION ALL
SELECT 'Gill' as NAME, '25-35' as AGE, 11 as VALUE from dual

Ответы на вопрос(1)

Ваш ответ на вопрос