postgresql SQL使用二维数组“CASE WHEN”_“IN”_“THEN”_“ELSE”_

rqdpfwrv  于 2023-04-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(155)

我使用postgres和GOLANG
基本上,我想传入一个2D数组(不一定是2D数组,可以是结构体或JSON对象)。如果第一个值与产品类别匹配,则添加第二个值,否则添加0
如果它不是一个2D数组,100表示是,0表示否

...

+ (CASE WHEN products.category IN $1 THEN 100 ELSE 0 END)
...

$1只是类别的一个简单片段
我曾以为,自己是一个平凡的人,却又是一个平凡的人。如果产品类别是1,我可以加100,如果是3,我可以加50,以此类推。。。否则我们就加0
所以伪代码看起来像这样。..

+ (CASE WHEN products.category IN ($1).x THEN ($1).y ELSE 0 END)

这个想法是我可以通过API调用升级产品的排序值。
我玩过unnest,尝试过一些循环的东西,但不能完全理解它,任何SQL或GOLANG的建议。我真的想让他们在SQL查询中保持繁重的工作

bihw5rsg

bihw5rsg1#

实际上我已经弄明白了,但我没有使用CASE WHEN IN,我只是创建一个json_object的表,并执行左联接和COALESCE

select products.uuid, products.category, COALESCE(CAST(catquery.value as integer),0) as value from products
LEFT JOIN (
   select key as category, value as value
   from json_each_text(
      json_object('{{1,20}}')
)) as catquery ON products.category = CAST(catquery.category as integer)

所以在我的API中,我只是以'{{1,20},{3,100}}'格式发送json对象作为字符串,然后在我的查询中传递这个字符串,下面是我的查询的简化版本:

select products.uuid, products.category, COALESCE(CAST(catquery.value as integer),0) as value from products
LEFT JOIN (
   select key as category, value as value
   from json_each_text(
      json_object($1)
)) as catquery ON products.category = CAST(catquery.category as integer)

相关问题