Найдите максимальное значение между двумя столбцами и обновите соответственно в postgres - PullRequest
0 голосов
/ 04 октября 2018

У меня есть две таблицы license, а другая - device в обеих таблицах у меня есть один общий столбец merchant_id.В таблице device у меня есть несколько записей для одного продавца (значит, merchant_id является дубликатом).Но в license таблица merchant_id уникальна (означает, что нет дубликатов merchant_id).Теперь мое требование состоит в том, чтобы подсчитать количество строк в таблице device и обновить счетное число в столбце number_of_devices, который присутствует в таблице license, а в столбце number_of_devices уже есть данные, поэтому при обновлении вв таблицу license Мне нужно проверить значение MAX.Если значение счетчика приближается к максимальному, тогда мне нужно обновить.

Мои проверенные запросы:

update license l set number_of_devices = 
from (select count(*),merchant_id from device d group by merchant_id) 
d where l.merchant_id= d.merchant_id;

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Полагаю, вы могли бы использовать команду CASE в своем внутреннем запросе для достижения этой цели.(документ: https://www.postgresql.org/docs/9.1/static/functions-conditional.html). Пример (не проверено):

update licence l set l.number_of_devices = (CASE WHEN (select count(*) from device d where d.merchant_id = l.merchant_id) > l.number_of_devices THEN (select count(*) from device d where d.merchant_id = l.merchant_id) ELSE l.number_of_devices END );

Надеюсь, что поможет

Приветствия

Nikao

0 голосов
/ 04 октября 2018
  • В подзапросе производной таблицы определите devices_count на merchant_id из таблицы device.
  • Присоедините эту производную таблицу к таблице license в merchant_id.
  • Теперь используйте функцию Greatest(), чтобы получить максимальное значение из devices_count и существующего значения number_of_devices и Set it.

Попробуйте следующее:

UPDATE license l 
SET l.number_of_devices = GREATEST(t1.devices_count, l.number_of_devices)
FROM (
      select d.merchant_id, 
             count(d.merchant_id) as devices_count 
      from device d 
      group by d.merchant_id
     ) as t1 
WHERE t1.merchant_id = l.merchant_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...