簡體   English   中英

如何在 json 中創建類表結構

[英]How to create table-like structure in json

我需要將“表”下方放入 json 中,其中的值與從表中一樣容易訪問。 這是使用的小樣本和簡單示例查詢。

    with prizes as (
            select t.stake, tickets_no, t.prize 
            from (values 
              (400, 5, 10)
            , (1000, 10, 25)
            , (2000, 50, 70)
            ) t
            (stake, tickets_no, prize) 
            order by 1,2 
        )

select max(prize) from prizes 
where 1200 >= stake
and 27 >= tickets_no

我想把它放在某種這樣的結構中:

https://www.db-fiddle.com/f/pS5vR4CM8Y6sjsVXkw7XUY/1

create table promotions 
(id integer,
details jsonb);

insert into promotions
values
(1, '{"name": "promo1", "rules":[/* it should be an array here or somehow different? */]}');

如果你重新組織你的 JSON 結構可能會更簡單:

insert into promotions
    values
    (1, '{"name":"promo1","rules":[{"stake":100,"tickets_no":10,"prize":200},{"stake":500,"tickets_no":30,"prize":700},{"stake":1000,"tickets_no":80,"prize":1200}]}');

create type t_rule as (prize int, stake int, tickets_no int);

select id, t.*
from promotions, jsonb_populate_recordset(null::t_rule, details->'rules') as t;

 id | prize | stake | tickets_no 
----+-------+-------+------------
  1 |   200 |   100 |         10
  1 |   700 |   500 |         30
  1 |  1200 |  1000 |         80

select max(prize)
from promotions, jsonb_populate_recordset(null::t_rule, details->'rules') as t
where stake < 1111;

 max  
------
 1200

我設法做到了:

 create table promotions 
    (id integer,
    details jsonb);

    insert into promotions
    values
    (1, '{"name": "promo1", "rules":{"stake":[100,500,1000], "tickets_no":[10,30,80], "prize":[200,700, 1300]}

     }');

+ simple query with operation of values:

    with promo as (select jsonb_array_elements(details -> 'rules' -> 'stake')::text::integer as stake,
    jsonb_array_elements(details -> 'rules' -> 'tickets_no')::text::integer as bets_no,
    jsonb_array_elements(details -> 'rules' -> 'prize')::text::integer as prize
    from promotions  )

    select max(prize) from promo where 1111 > stake

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM