No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende Ingl茅s, Programaci贸n, AI, Ciberseguridad y m谩s a precio especial.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

2 D铆as
0 Hrs
38 Min
6 Seg

Agregando objetos

22/34
Recursos

Aportes 27

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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

ej:

SELECT
MAX(
(info -> 鈥榠tems鈥 ->> 鈥榗antidad鈥) :: integer
)
FROM ordenes

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;

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.

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

json o jsonb

la diferencia entre estos dos es la forma en la que se almacena los datos json lo almacena literalmente en cambio jsonb lo almacena de una forma mas eficiente adem谩s de tener muchas mas funcionalidades que el json, es por esto que en la mayoria de los casos es mejor elegir jsonb pero en casos espec铆ficos como mantener el json intacto o realizar muchas inserciones el json sera mejor que el jsonb

para mas informaci贸n

Tambi茅n se puede hacer de esta manera

SELECT
MIN((info -> 鈥榠tems鈥 ->> 鈥榗antidad鈥) :: INTEGER),
MAX((info -> 鈥榠tems鈥 ->> 鈥榗antidad鈥) :: INTEGER),
SUM((info -> 鈥榠tems鈥 ->> 鈥榗antidad鈥) :: INTEGER),
AVG((info -> 鈥榠tems鈥 ->> 鈥榗antidad鈥) :: INTEGER)
FROM ordenes;

Yo habr铆a llamado a esta clase: "Funciones de Agregaci贸n en Objetos".

CAST: Transforma un tipo de dato en otro

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

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

Nota
Aunque es posible realizar operaciones en objetos JSON, es preferible realizar agregaciones sobre datos primitivos siempre que sea posible, ya que esto suele ser m谩s eficiente en t茅rminos de rendimiento.

Va demasiado r谩pido 馃槙

Dejo mi Query dejando con dos decimales el promedio: SELECT MIN( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ), MAX( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ), SUM( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ), ROUND( AVG( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ),2 ) FROM ordenes;
SELECT MIN( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ), MAX( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ), SUM( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ), ROUND( AVG( CAST( info -> 'items' ->> 'cantidad' AS INTEGER ) ),2 ) FROM ordenes;
`Utilizando :: 鈫揱 ```js SELECT MAX((info -> 'items' ->> 'cantidad')::INTEGER), MIN((info -> 'items' ->> 'cantidad')::INTEGER), SUM((info -> 'items' ->> 'cantidad')::INTEGER), AVG((info -> 'items' ->> 'cantidad')::INTEGER) FROM orders; ``` ![](https://static.platzi.com/media/user_upload/image-013e82a4-cf2d-4f40-8b9b-1042dec7ec52.jpg)

22. Agregando objetos

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

Excelente conocer este aspecto, le da mas valor y conocimiento a la hora de presentar informaci贸n sin complicarse la vida

Esta es como una forma m谩s resumida para trabajar. Ya no quiero bajar tablas sino una columna en jason y desde ahi trabajar con la informaci贸n e ir dando formato al campo a medida que lo necesite

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.

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.