проверить для того же диапазона в postgresql - PullRequest
1 голос
/ 09 апреля 2020

Я хотел проверить, содержит ли мой столбец (Amount) для одного конкретного студента значение меньше 10, и если да, то проверить, что для этого же студента мой столбец (Amount) также больше 10 и обновите столбец new соответственно в PostgreSQL.

МОЯ таблица:

x

Пробовал таким образом, но не работает

update table t1 set "New"='pass'
where cast("Amount" as numeric) <= 10 and cast("Amount" as numeric) > 10 

Результат, который я ожидаю:

y

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Один из вариантов - самостоятельно объединить таблицу с агрегированным подзапросом, а затем выполнить условное присвоение во внешнем запросе:

update t1
set new = case when min_amount <= 10 and max_amount > 10 then 'pass' else 'not pass' end
from (
    select name, min(amount::numeric) min_amount, max(amount::numeric) max_amount
    from t1 
    group by name 
) t2
where t1.name = t2.name

Демонстрация на DB Fiddle :

name  | amount | new     
:---- | :----- | :-------
Harry | 3      | pass    
Harry | 50     | pass    
Ron   | 5      | not pass
0 голосов
/ 09 апреля 2020

Этот запрос должен помочь:

UPDATE atable AS t1
SET "New" = EXISTS (SELECT 1 FROM atable t2
                    WHERE t2."Name" = t1."Name"
                      AND t2."Amount" <= 10)
            AND
            EXISTS (SELECT 1 FROM atable t2
                    WHERE t2."Name" = t1."Name"
                      AND t2."Amount" > 10);
...