这里有两个表。
表1
id integer
color_name character(64)
表2
id integer
jdata jsonb
Json数据如下:
{"price": 4500, "colorId": 5}
我需要输出颜色和按颜色分组的项目数,因此我尝试使用此查询:
SELECT Table1.color_name, Table2.jdata ->> 'colorId', count(*)
FROM Table1
INNER JOIN Table2
ON Table1.id = Table2.jdata ->> 'colorId'
group by Table2.jdata ->> 'colorId';
我得到一个错误:
错误:运算符不存在:integer = jsonb
我也尝试执行此操作:
select Table1.color_name, count(*)
from Table1
join Table2
on (Table2.jdata->>'colorId')::int = Table1.id
group by Table1.color_name
我得到的是
错误:无法将jsonb类型转换为整数
答案 0 :(得分:3)
我认为您需要这个:
select Table1.color_name, count(*)
from Table1
join Table2
on (Table2.jdata->>'colorId')::int = Table1.id
group by Table1.color_name
答案 1 :(得分:0)
上下文:将class InvoiceAdmin(admin.ModelAdmin):
inlines = [InvoiceItemInline]
def save_related(self, request, form, formsets, change):
invoice = form.instance
invoice.total = 0
for inlines in formsets:
for inline_form in inlines:
invoice.total = invoice.total + inline_form.cleaned_data.get('price') * inline_form.cleaned_data.get('quantity')
invoice.save()
super(InvoiceAdmin, self).save_related(request, form, formsets, change)
投射到jsonb
不能正常工作。
解决方案:尝试采用其他方法。如果您尝试将int
与int
匹配,您仍然会收到错误消息,因此您可以尝试以下操作:
jsonb
答案 2 :(得分:0)
解决这个问题的简单方法:select cast(value #>> '{}' as integer)
'value' 是变量 jsonb 类型。
例如:
select cast(to_jsonb('3'::text) #>> '{}' as integer)