Introdución a las Bases de Datos
Todo lo que aprenderás sobre PostgreSQL para ciencia de datos
Importación de los datos para el proyecto
Breve historia de las bases de datos
Puntos fuertes de las bases de datos relacionales
Conceptos importantes de las bases de datos relacionales
Principales sentencias SQL
Ciencia de Datos
¿Qué es la ciencia de datos?
Aplicación de la ciencia de datos
Equipos orientados a datos
Data science vs. Machine Learning
Particularidades de PostgreSQL
Diferencias entre otros manejadores y PostgreSQL
Conoce los superpoderes de PLPGSQL
PLPGSQL: Stored procedures
PLPGSQL: conteo, registro y triggers
PLPGSQL: Aplicado a data science
Integración con otros lenguajes
Tipos de Datos Personalizados
Casos Prácticos
Explicación de la estructura de la base de datos de ejemplo
Agregación de datos
Pensando en la presentación
Trabajando con objetos
Agregando objetos
Common table expressions
Window functions
Particiones
Platzi movies dashboard
Presentación del proyecto
Top 10
Actualizando precios
Usando rank y percent rank
Ordenando datos geográficos
Datos en el tiempo
Visualizando datos con Tableau
Siguientes pasos
¿Qué sigue?
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 28
Preguntas 4
Me tome una tarde para leer y tratar de entender esta clase, les dejo el tutorial que hice, espero les sirva, el feedback es bien recibido
https://platzi.com/tutoriales/1780-postgresql-datos/7204-common-table-expressions/
Dejo el codigo que en el tutorial explico a detalle
-- tabla temporal 1
WITH peliculas_rentadas AS (
SELECT pelicula_id, COUNT(fecha_renta) AS rentas_acumuladas
FROM inventarios
JOIN rentas
ON inventarios.inventario_id = rentas.inventario_id
GROUP BY inventarios.pelicula_id
ORDER BY rentas_acumuladas DESC
),
-- tabla temporal 2
peliculas_categoria_horror AS (
SELECT pelicula_id, nombre
FROM peliculas_categorias
JOIN categorias
ON peliculas_categorias.categoria_id = categorias.categoria_id
WHERE
categorias.nombre = 'Horror'
)
SELECT
peliculas.titulo,
peliculas.clasificacion,
peliculas_categoria_horror.nombre AS genero,
peliculas_rentadas.rentas_acumuladas AS rentas_acumuladas,
precio_renta * (peliculas_rentadas.rentas_acumuladas) AS monto_rentas_acumulado
FROM peliculas
JOIN peliculas_categoria_horror
ON peliculas.pelicula_id = peliculas_categoria_horror.pelicula_id
JOIN peliculas_rentadas
ON peliculas.pelicula_id = peliculas_rentadas.pelicula_id
WHERE
peliculas.duracion > 100 and peliculas.precio_renta < 1 ;
Falto explicar un poco mejor este tema
No entendà por que daba 5050 al final, pero indagando un poco es la suma recursiva de todos los números hasta el 100
Traducido a Python serÃa algo asÃ:
suma = 0
for i in range(101):
suma = suma + i
Dejó el aporte por si alguien tuvo la misma duda.
Podrian explicarme un poco mas para q usamos un Common table expression??
utilizar PostgreSQL CTE (expresiones de tabla comunes) para simplificar consultas complejas.
Introducción a las expresiones de tabla comunes de PostgreSQL o CTE
Una expresión de tabla común es un conjunto de resultados temporal que se puede hacer referencia en otro comando SQL incluyendo SELECT, INSERT, UPDATEo DELETE.
Las expresiones de tabla comunes son temporales en el sentido de que solo existen durante la ejecución de la consulta.
A continuación, se muestra la sintaxis de la creación de un CTE:
WITH cte_name (column_list) AS (
CTE_query_definition
)
statement;
En esta sintaxis:
Primero, especifique el nombre del CTE seguido de una lista de columnas opcional.
En segundo lugar, dentro del cuerpo de la WITHcláusula, especifique una consulta que devuelva un conjunto de resultados. Si no especifica explÃcitamente la lista de columnas después del nombre de CTE, la lista de selección de CTE_query_definitionse convertirá en la lista de columnas de CTE.
En tercer lugar, utilizar el CTE como una tabla o vista en la statementque puede ser una SELECT, INSERT, UPDATE, o DELETE.
Las expresiones de tabla comunes o CTE se utilizan normalmente para simplificar uniones y subconsultas complejas en PostgreSQL.
Bueno este tema es algo más denso, creo que serÃa ideal usar un par de ejemplos adicionales para comprender mejor el tema, más sin embargo sintetizando lo que comenta Isra en esta clase:
Es una herramienta que usa expresiones de tablas para agilizar en postgres cálculos en casos de uso especÃficos.
Ofrecen una mayor aplicabilidad a casos de usos iterantes, casos en los cuales su estructura bajo lenguaje SQL es dispendiosa tanto en su construcción como su ejecución para el servidor.
Es necesario ahondar más en este tema ya que su versatilidad es interesante.
[https://www.postgresql.org/docs/12/queries-with.html#QUERIES-WITH-SELECT]
las common table expressions son muy parecidas a lo que se conoce como Tally Tables en SQL Server, son muy utiles también cuando quieres por ejemplo ir sumando un dia consecutivo a una fecha inicial.
Hola,
Comparto mi intento de CTE, en la clase le están dando un uso un tanto complejo, a mi parecer, profundizaré pero también es usado como una tabla temporal que de ser la lógica, performarÃa mucho más rapido.
WITH tabla_nombres_empleados
AS(
SELECT empleado_id, CONCAT(nombre, ' ', apellido) AS Nombre
FROM empleados
),
direccion_ciudad_tienda
AS(
SELECT t.direccion_id, d.direccion_ciudad
FROM tiendas AS t
JOIN (
SELECT d.direccion_id, CONCAT(d.direccion, ' - ', c.ciudad) AS direccion_ciudad
FROM direcciones AS d
JOIN ciudades AS c
ON d.ciudad_id = c.ciudad_id
WHERE d.direccion_id IN (SELECT direccion_id FROM tiendas)
) AS d
ON t.direccion_id = d.direccion_id
)
SELECT t.tienda_id, n.nombre AS jefe, d.direccion_ciudad AS direccion
FROM tiendas AS t
JOIN tabla_nombres_empleados AS n
ON t.jefe_tienda_id = n.empleado_id
JOIN direccion_ciudad_tienda AS d
ON t.direccion_id = d.direccion_id
Quedaria mejor explicando con un ejemplo, de un caso en los que son utiles
WITH RECURSIVE tabla_recursiva(n) AS (
VALUES(1)
UNION ALL
SELECT n+1 FROM tabla_recursiva WHERE n < 10
) SELECT SUM(n) FROM tabla_recursiva;
Dejo el código de la clase
WITH RECURSIVE tabla_recursiva(n) AS (
VALUES(1)
UNION ALL
SELECT n+1 from tabla_recursiva WHERE n < 100
) SELECT SUM(n) FROM tabla_recursiva;
🤔
Aquà un recurso de la página de postgres:
A poner en práctica, son muy potentes.
Recordemos:
Que PostgreSQL, es un sistema de gestión de bases de datos relacional orientado a objetos
interesante
Me tome una tarde para leer y tratar de entender esta clase, les dejo el tutorial que hice, espero les sirva, el feedback es bien recibido
https://platzi.com/tutoriales/1780-postgresql-datos/7204-common-table-expressions/
Comparto el query final
with recursive tabla_recursiva(n) as(
values(1)
union ALL
select n+1 from tabla_recursiva where n < 100
) select sum(n) from tabla_recursiva
;```
Me habia encontrado con querys de este tipo, y pensé que era una propiedad mas de postgresql, aunque en ese entonces entedà la lógica que tenian, ahora sé su definición.
Recomiendo leer la documentación que compartió @Camilo Duque,para tener las Comon table expresions mas claras
WITH RECURSIVE: Proceso iterativo a partir de common table expressions.
Es compleja estas expresiones creo que falto un ejemplo mas aplicado al proyecto.
intentare explicar lo que entendÃ:
las common table expressions tienen múltiples usos, el primero y que te puede ayudar a entenderlas un poco aunque no es practico es usarlas como filtro:
WITH top_peliculas AS (
SELECT titulo
FROM peliculas
WHERE precio_renta < 3
)
SELECT SUM(duracion) AS duracion_top_peliculas
FROM peliculas
WHERE titulo IN (SELECT titulo FROM top_peliculas)
GROUP BY titulo;
adicionalmente puedes agregar la funcionalidad RECURSIVE , que permite iterar por decirlo de una manera, un buen ejemplo es el que compartió Sandra Milena Rairán Pinilla
WITH RECURSIVE precio_recursivo(n) AS (
VALUES (0)
UNION ALL
SELECT precio_renta FROM peliculas WHERE precio_renta < 0.99
)
SELECT sum(n) FROM precio_recursivo;
conclusión: la funcionalidades no se ven con ejemplos tan sencillos pero sin duda esta funcionalidad tiene mucho poder, por ejemplo filtros muy complejos y reutilizables. para mas info en: https://www.postgresql.org/docs/12/queries-with.html
muy intenresante
Creo debimos primero ver que son las common talbe expressions y ya después de entender eso agregarle la recursividad, tema muy interesante y super útil, ojala pudieramos verlo más profundo.
https://www.postgresqltutorial.com/postgresql-recursive-query/
este tutorial me ayudó bastante
Veamos:
Primero, este mecanismo permite encapsular consultas complejas cómo CTEs haciendo que la consulta principal quede simple y legible, con esto garantizamos reusabilidad por parte del motor de BD donde se haga referenceia a la CTE,
y esto es porque los motores de base de datos implementan mecanismos para optimizar el uso de estos recursos, obteniendo una única vez los datos del subconjunto definido en la CTE
Common table expressions, forma parte del estándard SQL-99, y su implementación por parte de los motores de base de datos que soportan este estándar es opcional:
En PostgreSQL soportado a partir de la versión 8.4
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.