2017-03-02 5 views
0

테이블에 jsonb 필드에 대한 특정 쿼리를 수행하려고하지만 최종 출력을 int로 가져 오는 데 문제가 있습니다. 아래 형식으로 JSONB 필드로 각 행을 가정하면 각 제품별로 총 주문 수를 얻고 싶습니다. 이 총을 보인다 그러나JSONB 필드에 값 집계

product  | total 
Product A | 10 
Product B | 15 
Product C | 0 

가 jsonb 필드 : 나는 제품이 총을 얻을 수있어이와

select key as product, value::json->'orders'->'total' as total 
from table, jsonb_each_text(json_field) 
group by key, value; 

:

{ 
    "Product A": { 
     "orders": {"total": 2, "stuff": 3} 
     "..." 
    }, 
    { 
    "Product B": { 
     "orders": {"total": 1, "stuff": 1} 
     "..." 
    }, 
    { 
    "Product C": { 
     "orders": {"total": 5, "stuff": 0} 
     "..." 
    } 
} 

나는 쿼리를 수행 한 , 나는 (값 :: json -> 'orders'-> 'total') :: numeric을 사용하려고 시도했으나 캐스트가 불가능하다고 말합니다. 제발 도와 줄 수있어? -> '순서'

(value::json->'orders'->'total')::text::numeric 
+1

당신은'jsonb_each (json_field)'와'값을 사용한다 : 필요

처럼를 숫자로 변환하기 전에 텍스트로 변환 : – pozs

+0

차가움. 고맙습니다. – absg

답변

0

나는 그것을 할 마지막 수 있었다 - >> 총합. 숫자로 변환 할 수 있다는 것입니다 (단, 해당 필드가 실제로는 JSON 번호 인 경우에만 해당).
+0

아니면 그냥 : (값 :: json -> '주문'-> '합계') :: 숫자' –