Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Agregando objetos

22/33
Recursos

Aportes 16

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

otra forma un poco mas resumida seria con el uso de ::

ej:

SELECT
MAX(
(info -> ‘items’ ->> ‘cantidad’) :: integer
)
FROM ordenes

Yo trabajé con contrataciones públicas del gobierno federal en México, fue una tortura hacer las consultas en MongoDB, saber esto antes me hubiera ahorra mucho tiempo.

Tambien se puede hacer de esta forma sin expresar el CAST

SELECT MIN((INFO -> 'items' ->> 'cantidad') :: integer) min_,
	MAX((INFO -> 'items' ->> 'cantidad') :: integer) max_,
	SUM((INFO -> 'items' ->> 'cantidad') :: integer) sum_,
	AVG((INFO -> 'items' ->> 'cantidad') :: integer) avg_
FROM ORDENES;

Es importante recalcar que a pesar de que Postgres nos permite realizar operaciones sobre los datos de cadenas JSON este proceso resulta costoso, y es recomendable trabajar con tipos de datos básicos siempre que sea posible.

SELECT 
	SUM(
		-- Cambiando a tipo de dato entero
		CAST( info -> 'items' ->> 'cantidad' AS INTEGER)
	),
	MAX(
		CAST( info -> 'items' ->> 'cantidad' AS INTEGER)
	),
	AVG(
		CAST( info -> 'items' ->> 'cantidad' AS INTEGER)
	)
FROM ordenes;```

Para el motor de Postgres es complejo y computacionalmente costoso, hacer cálculos con objetos tipo JSON

También se puede hacer de esta manera

SELECT
MIN((info -> ‘items’ ->> ‘cantidad’) :: INTEGER),
MAX((info -> ‘items’ ->> ‘cantidad’) :: INTEGER),
SUM((info -> ‘items’ ->> ‘cantidad’) :: INTEGER),
AVG((info -> ‘items’ ->> ‘cantidad’) :: INTEGER)
FROM ordenes;

Cuando traten de hacer operaciones con datos numéricos flotantes, simplemente tienen que especificarlo:

SELECT AVG(
      CAST(
         info -> 'items' ->> 'precio' AS FLOAT
      )
   )
FROM ordenes;

Interesante este manejo con JSON

Entendido, hay que tener en cuenta el rendimiento

SELECT 
	MIN(
		CAST(
			info -> 'items' ->> 'cantidad' AS INTEGER
		)
	)
FROM ordenes;

SELECT 
	MIN(
		CAST(
			info -> 'items' ->> 'cantidad' AS INTEGER
		)
	),
	MAX(
		CAST(
			info -> 'items' ->> 'cantidad' AS INTEGER
		)
	),
	SUM(
		CAST(
			info -> 'items' ->> 'cantidad' AS INTEGER
		)
	),
	AVG(
		CAST(
			info -> 'items' ->> 'cantidad' AS INTEGER
		)
	)
FROM ordenes;

excelente

interesante

El lenguaje plsql es demasiado poderoso.

CAST: Transforma un tipo de dato en otro

Excelente las posibilidades que esto representa.

Muy interesante trabajarlo casi nativo y muy útil ya que trabajamos los datos sin utilizar una capa de negocios.