在两列之间找到最大值,并在postgres中进行相应更新

时间:2018-10-04 19:18:19

标签: sql postgresql

我有两个表license,另一个表是device,在两个表中,我有一个公用列是merchant_id。 在device表中,我有一个商人的多个记录(意味着商人ID是重复的)。 但是在licensemerchant_id中是唯一的(意味着没有重复的商人ID)。 现在,我的要求是我必须对device表中的行数进行计数,并且需要将计数的数目更新为number_of_devices表中存在的license列,并且{{ 1}}列,因此在更新到number_of_devices表时,我需要检查license的值。如果计数值达到最大值,那么我需要更新。

我尝试过的查询

MAX

2 个答案:

答案 0 :(得分:2)

  • 在派生表子查询中,从devices_count表中确定每个merchant_id的{​​{1}}。
  • 将此派生表加入到device上的license表中。
  • 现在,使用Greatest()函数从merchant_id和现有devices_count值中获取最大值,然后number_of_devices

尝试以下操作:

Set

答案 1 :(得分:0)

我想您可以在内部查询中使用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