AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 230050
Accepted
Brown Bear
Brown Bear
Asked: 2019-02-19 06:30:58 +0800 CST2019-02-19 06:30:58 +0800 CST 2019-02-19 06:30:58 +0800 CST

obter chaves de herança dentro do json

  • 772

Tenho campo JSON com valores como no exemplo, e preciso pegar todos os dados da chave 'stat' dentro dele. A lista de chaves dentro dos dados não é constante.

WITH test_data AS (
SELECT 1 as id,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": []}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json AS data
UNION ALL
SELECT 2,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": []}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json
UNION ALL
SELECT 3,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": [{"percent_from": 0, "percent": 0, "stat": "61/71#61/71,61/71#92/83,90/78#102/82,80/73#90/78,82/72#99/74,92/71#99/75,93/62#95/71,92/53#95/62,86/50#107/53", "completed_at": "2017-11-27 14:29:22.878709"}]}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json
UNION ALL
SELECT 4,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": [{"percent_from": 0, "percent": 1, "stat": "42/21#42/21,42/21#89/24,77/24#95/26,86/13#95/25,92/6#96/13,62/6#93/8,61/8#62/10,61/10#61/12,0/12,0/16,0/21,0/12#61/33,0/28#0/34,0/23#0/28,0/20#0/23,0/18#0/20,0/18#0/18,0/18#0/24,0/24#0/25,0/23#0/24,0/21#0/23,0/18#0/21,0/12#0/18,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12,0/15,0/12#47/21,0/21#0/25,0/25#0/29,0/29#0/33,0/30#0/35,0/27#0/30,0/27#0/34,0/31#0/35,0/27#0/31,0/25#0/28,0/28#0/31,0/24#0/31,0/23#0/25,0/25#0/27,0/25#0/28,0/19#0/24,0/16#0/19", "completed_at": "2018-08-20 12:18:14.404032"}]}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json
UNION ALL
SELECT 5,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": []}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": [{"percent_from": 0, "percent": 74, "stat": "50/41#50/41,48/41#50/43,48/41#48/43,0/45,0/43#48/54,0/54#52/54,52/54#52/55,0/54,0/54#52/56,0/51#0/55,0/50#0/51,0/50#0/51,0/51#63/56,63/56#71/61,69/61#72/64,69/63#69/66,66/64#69/65,66/61#71/64,72/53#80/61,75/46#80/53,72/43#75/46,69/36#75/43,75/31#79/36,75/30#79/31,71/31#73/32,69/31#78/32,69/32#78/32,64/32#69/33,64/33#70/33,70/33#70/33,70/33#70/33,70/33#74/35,74/35#75/40,75/40#75/45,75/45#75/50,75/50#76/56,74/56#79/60,79/60#79/64,79/64#79/67,75/67#79/68,69/68#75/68,65/68#69/68,67/54#78/68,73/45#78/54,72/42#76/45,76/39#77/42,73/34#77/38,72/29#73/34,73/21#75/29,74/11#76/21,75/6#81/11,77/4#81/6,74/3#77/6,75/6#79/10,75/10#78/15,74/15#78/22,78/22#82/25,74/25#82/27,72/27#74/31,72/25#72/31,71/22#72/25,71/23#80/28,80/28#85/37,72/37#84/48,69/48#72/67,0/74,0/67#69/75,0/66#0/71,0/60#0/66,0/55#67/60,63/53#64/55,64/53#64/55,64/53#64/56,64/45#64/53,64/44#64/48,62/48#64/56,62/56#62/63,0/64,0/63#62/65,0/65#0/75", "completed_at": "2018-08-08 18:57:51.990080"}]}
     }'::json
), keys AS (
    SELECT 
        json_object_keys(data) as key,
        id
    FROM test_data
)

, keys AS (
            SELECT 
               json_object_keys(data) as key,
               id
            FROM test_data
          )
 SELECT json_array_elements(gs.data->key->'sessions')->'stat',
     key
 FROM test_data gs
     JOIN keys ON keys.id = gs.id
 WHERE gs.data->key->'sessions' IS NOT NULL
     AND (gs.data->key->'sessions')::jsonb != '[]'

como você vê eu faço o join múltiplo para a tabela para si mesmo, está certo ou pode ser outra melhor solução?

Mais detalhes: no campo da tabela json, a versão atual do servidor é9.4

postgresql json
  • 1 1 respostas
  • 57 Views

1 respostas

  • Voted
  1. Best Answer
    McNets
    2019-02-19T06:57:14+08:002019-02-19T06:57:14+08:00

    Não tenho certeza se se encaixa no que você está procurando:

    SELECT 
        json_array_elements(dt.value::json->'sessions')->'stat'
    FROM
        test, json_each(data) dt
    
    | ?coluna?
    | :
    | "61/71#61/71,61/71#92/83,90/78#102/82,80/73#90/78,82/72#99/74,92/71#99/75,93 /62#95/71,92/53#95/62,86/50#107/53"
    | "42/21#42/21,42/21#89/24,77/24#95/26,86/13#95/25,92/6#96/13,62/6#93/8,61 /8#62/10,61/10#61/12,0/12,0/16,0/21,0/12#61/33,0/28#0/34,0/23#0/28 ,0/20#0/23,0/18#0/20,0/18#0/18,0/18#0/24,0/24#0/25,0/23#0/24,0 /21#0/23,0/18#0/21,0/12#0/18,0/12#0/12,0/12#0/12,0/12#0/12,0/12 #0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0 /12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12 ,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0 /12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12 ,0/15,0/12#47/21,0/21#0/25,0/25#0/29,0/29#0/33,0/30#0/35,0/27#0 /30,0/27#0/34,0/31#0/35,0/27#0/31,0/25#0/28,0/28#0/31,0/24#0/31 ,0/23#0/25,0/25#0/27,0/25#0/28,0/19#0/24,0/16#0/19"
    | "50/41#50/41,48/41#50/43,48/41#48/43,0/45,0/43#48/54,0/54#52/54,52/54#52 /55,0/54,0/54#52/56,0/51#0/55,0/50#0/51,0/50#0/51,0/51#63/56,63/56 #71/61,69/61#72/64,69/63#69/66,66/64#69/65,66/61#71/64,72/53#80/61,75/46#80 /53,72/43#75/46,69/36#75/43,75/31#79/36,75/30#79/31,71/31#73/32,69/31#78/32 ,69/32#78/32,64/32#69/33,64/33#70/33,70/33#70/33,70/33#70/33,70/33#74/35,74 /35#75/40,75/40#75/45,75/45#75/50,75/50#76/56,74/56#79/60,79/60#79/64,79/64 #79/67,75/67#79/68,69/68#75/68,65/68#69/68,67/54#78/68,73/45#78/54,72/42#76 /45,76/39#77/42,73/34#77/38,72/29#73/34,73/21#75/29,74/11#76/21,75/6#81/11 ,77/4#81/6,74/3#77/6,75/6#79/10,75/10#78/15,74/15#78/22,78/22#82/25,74 /25#82/27,72/27#74/31,72/25#72/31,71/22#72/25,71/23#80/28,80/28#85/37,72/37 #84/48,69/48#72/67,0/74,0/67#69/75,0/66#0/71,0/60#0/66,0/55#67/60,63 /53#64/55,64/53#64/55,64/53#64/56,64/45#64/53,
    

    db<>fique aqui

    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve