在YugabyteDB YSQL中调整SUM逻辑以实现对数组元素的重复统计
解决重复ID在IN子句中无法重复统计的问题
嘿,这个问题我太熟悉了!IN子句本身会自动去重,所以哪怕你写两次134,它只会匹配一次对应的记录,自然SUM出来是2而不是4。要实现每个ID都单独计算的话,咱们换个思路,把重复的ID做成一个临时数据集,再和原表关联就行,具体SQL如下:
SELECT SUM(rt."baseOccupancy") FROM ( VALUES (134), (134) ) AS ids(id) INNER JOIN "RoomTypes" rt ON rt.id = ids.id;
原理说明
- 首先用
VALUES子句把你需要的ID列表(包括重复项)构造出一个临时的虚拟表ids,这里面有两行id=134的记录; - 然后通过
INNER JOIN把这个虚拟表和RoomTypes表关联,这样每一行重复的ID都会匹配到RoomTypes中对应的baseOccupancy值; - 最后SUM的时候就会把两个2加起来,得到你想要的4。
如果你的ID列表特别长,这种方法也比写一堆UNION ALL要简洁得多。当然如果只是少量重复ID,也可以用下面这种写法,但扩展性就差一些:
SELECT SUM("baseOccupancy") FROM "RoomTypes" WHERE id = 134 UNION ALL SELECT SUM("baseOccupancy") FROM "RoomTypes" WHERE id = 134;
这样执行后会得到两个结果行,你再把它们加起来也能得到4,但显然第一种方法更高效优雅~
内容的提问来源于stack exchange,提问作者dh YB
相关产品推荐
相关产品推荐

