Mi pregunta es ¿cómo puedo escribir una consulta para el recuento condicional? Tengo una variedad de objetos como este en mi tabla de Postgres que es jsonb
"instances": [ { "type": "bbox", }, { "type": "bbox", }, { "type": "bbox", }, { "type": "ellipse" } ]Tengo que encontrar el recuento de filas para las cuales, por ejemplo, en la matriz de instancias hay más de dos objetos cuyo tipo es igual a boxx, pero con operadores de secuencia.
solución sql
"Necesito escribir una consulta como esta para encontrar filas con bbox o elipse"
SELECT * FROM your_table AS t WHERE jsonb_path_exist(t.your_json_column :: jsonb, '$.**.keyvalue() ? (exists(@.key == 'bbox' || @.key == 'ellipse'))')"Tengo que encontrar el recuento de filas para las cuales, por ejemplo, en la matriz de instancias hay más de dos objetos cuyo tipo es igual a bbox"
SELECT count(*) FROM your_table AS t CROSS JOIN LATERAL ( SELECT count(*) AS count FROM jsonb_path_query(t.your_json_column :: jsonb, '$[*] ? (@.type == "bbox")') ) AS c WHERE c.count > 2