Ответ 1
Я изменил script из Дерека, и теперь он работает для меня:
UPDATE table1 AS t
INNER JOIN
(SELECT type,max(age) mage FROM table1 GROUP BY type) t1
ON t.type = t1.type AND t.age = t1.mage
SET name='HIGH'
Name type Age
-------------------------------
Vijay 1 23
Kumar 2 26
Anand 3 29
Raju 2 23
Babu 1 21
Muthu 3 27
--------------------------------------
Напишите запрос для обновления имени максимального возраста в каждом типе в "HIGH".
А также, пожалуйста, скажите мне, почему следующий запрос не работает.
update table1 set name='HIGH' having age = max(age) group by type;
Я изменил script из Дерека, и теперь он работает для меня:
UPDATE table1 AS t
INNER JOIN
(SELECT type,max(age) mage FROM table1 GROUP BY type) t1
ON t.type = t1.type AND t.age = t1.mage
SET name='HIGH'
Вы не можете использовать группу непосредственно в инструкции обновления. Это должно выглядеть следующим образом:
update t
set name='HIGH'
from table1 t
inner join (select type,max(age) mage from table1 group by type) t1
on t.type = t1.type and t.age = t1.mage;
Вы можете использовать полу-соединение:
SQL> UPDATE table1 t_outer
2 SET NAME = 'HIGH'
3 WHERE age >= ALL (SELECT age
4 FROM table1 t_inner
5 WHERE t_inner.type = t_outer.type);
3 rows updated
SQL> select * from table1;
NAME TYPE AGE
---------- ---------- ----------
HIGH 1 23
HIGH 2 26
HIGH 3 29
Raju 2 23
Babu 1 21
Muthu 3 27
6 rows selected
Ваш запрос не будет работать, потому что вы не можете сравнивать значение агрегата и столбца непосредственно в группе по запросу. Кроме того, вы не можете обновить агрегат.
попробуйте это
update table1 set name='HIGH' having age in(select max(age) from table1 group by type);
вы можете использовать приведенный ниже код.
Update table1#
inner Join (Select max(age) as age, type from Table1 group by Table1) t ON table.age = t.age#
Set name = 'High'#
Вы не можете использовать предложение GroupBy для оператора обновления. В течение этого времени вам придется использовать дополнительный запрос
Update table1
Set name = 'High'
From table1
Join (Select max(age), type from Table1 group by Table1) t ON table1.age = t.age
update table1 set Name='HIGH' where Age in(select max(Age) from table1)
UPDATE table1 SET name = 'HIGH' WHERE age IN (SELECT MAX(age) FROM table1 GROUP BY name)