Запрос на обновление SQL с предложением group by - PullRequest
40 голосов
/ 01 августа 2011
Name         type       Age
-------------------------------
Vijay          1        23
Kumar          2        26
Anand          3        29
Raju           2        23
Babu           1        21
Muthu          3        27
--------------------------------------

Напишите запрос для обновления имени человека максимального возраста для каждого типа в 'ВЫСОКИЙ'.

А также, пожалуйста, скажите мне, почему следующий запрос не работает

update table1 set name='HIGH' having age = max(age) group by type;

Ответы [ 8 ]

71 голосов
/ 20 марта 2013

Я изменил сценарий от Дерека, и теперь он работает для меня:

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'
8 голосов
/ 01 августа 2011

Вы не можете использовать group by напрямую в операторе обновления.Это будет выглядеть примерно так:

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;
2 голосов
/ 01 августа 2011

Вы можете использовать полусоединение:

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

Ваш запрос не будет работать, потому что вы не можете сравнить агрегат и значение столбца непосредственно в группе по запросу.Кроме того, вы не можете обновить агрегат.

0 голосов
/ 26 февраля 2015
UPDATE table1 SET name = 'HIGH' WHERE age IN (SELECT MAX(age) FROM table1 GROUP BY name)
0 голосов
/ 11 апреля 2014
update table1 set Name='HIGH' where Age in(select max(Age) from table1)
0 голосов
/ 22 февраля 2014

Вы можете использовать следующий код.

Update table1#
inner Join (Select max(age) as age, type from Table1 group by Table1) t ON table.age = t.age#
Set name = 'High'#
0 голосов
/ 01 августа 2011

Вы не можете использовать предложение GroupBy для оператора обновления.Вам придется использовать подзапрос в течение этого времени

Update table1
Set name = 'High'
From table1 
Join (Select max(age), type from Table1 group by Table1) t ON table1.age = t.age
0 голосов
/ 01 августа 2011

попробуйте

update table1 set name='HIGH' having age in(select max(age) from table1 group by type);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...