0% encontró este documento útil (0 votos)
6 vistas33 páginas

SQL for Data Science

El documento proporciona una introducción al uso de SQL (Structured Query Language) para gestionar bases de datos, explicando su sintaxis y funciones básicas como búsqueda, filtrado y actualización de datos. Se describen los tipos de bases de datos, componentes principales, y se presentan ejemplos de creación de bases de datos y tablas utilizando MySQL Workbench. Además, se abordan consultas básicas en SQL, incluyendo el uso de cláusulas como SELECT, DISTINCT, ORDER BY, LIMIT y WHERE para manipular y obtener información de las bases de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
6 vistas33 páginas

SQL for Data Science

El documento proporciona una introducción al uso de SQL (Structured Query Language) para gestionar bases de datos, explicando su sintaxis y funciones básicas como búsqueda, filtrado y actualización de datos. Se describen los tipos de bases de datos, componentes principales, y se presentan ejemplos de creación de bases de datos y tablas utilizando MySQL Workbench. Además, se abordan consultas básicas en SQL, incluyendo el uso de cláusulas como SELECT, DISTINCT, ORDER BY, LIMIT y WHERE para manipular y obtener información de las bases de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 33

SQL for Data Science

En el mundo de la informática siempre vamos a tener información que se encuentra


almacenada en un sitio y le llamamos Base de Datos.
Para organizar y gestionar esas bases de datos, usamos un sistema para estructurar
nuestras consultas.
Structured Query Lenguaje: SQL, Lenguaje Estructurado de Consultas
Entonces SQL es el idioma o lenguaje que utilizamos para hablar con nuestras bases de
datos. Con SQL podemos decirle a esa base de datos qué queremos que haga con esa
información que posee. Nos permite:
 Buscar información
 Agruparla
 Filtrarla
 Agregar nuevos datos
 Actualizar datos existentes
 Eliminar datos que ya no necesitamos

Lenguaje: Tiene su propia sintaxis (reglas para ser escrito ) y sus propias palabras y
significado de esas palabras. Idioma que utilizamos para comunicarnos con esas bases
de datos.

Estructurado: Tiene un conjunto de reglas claras y precisas para poder escribir


comandos que las bases de datos puedan entender sin confusión (sin ambigüedades ni
suposiciones) y que la base de datos sepa exactamente qué es lo que queremos.

Consultas: Todas las comunicaciones que vamos a establecer con las bases de datos a
través de su lenguaje estructurado son para hacerle consultas.
Ejemplo: Si queremos saber cuántos libros tienes que hayan sido publicados en 2016. Se
haría una consulta a la base de datos de libros para obtener esa información.
Programas para gestionar bases de datos:
 MySQL
 PostgreSQL
 SQL Server
Base de datos: Colección de daros estructurada
Tipos de bases de datos
Bases de datos relacionales: Se organizan en tablas y se llaman relacionales porque
esas tablas pueden estar relacionadas entre si. Ejemplo: Una tabla de clientes y otra de
pedidos donde cada pedido está relacionado a un cliente en especifico
Bases de datos no relacionales o NoSQL: Bases menos estructuradas y por lo tanto
mucho más flexibles y que pueden almacenar datos en formatos muy distintos
Componentes principales de una base de datos
1. Tablas: Son el componente básico de una base de datos. Cada tabla de una base
de datos contiene datos sobre un tema en especifico como una tabla para datos
de clientes, otra para productos que se venden y otra para los pedidos de cada
compra que han hecho los clientes
2. Filas: Registro de cada caso que existe en una tabla. En una tabla de clientes, en
cada registro se tendría la información de un cliente en especifico
3. Columnas o campos: Atributo o propiedad de los datos, en la tabla de clientes
podemos tener columnas como nombre, apellido, email, teléfono, etc.
4. Claves primarias: Es uno de los campos o columnas de la tabla que sirve para
identificar de manera única cada fila en una tabla. Por ejemplo, en la tabla de
clientes, podría haber 2 registros de clientes llamados Carlos Gomez y esto
confundir, para eso necesitamos una clave principal que podría ser una columna
llamas “ID cliente” que contenga un número único para cada cliente.
¿Dónde vamos a escribir nuestro código SQL para comunicarnos con nuestras
bases de datos?
Los instrumentos que utilizamos para la comunicación con una base de datos
se llaman Sistemas de Gestión de Bases de Datos o DBMS Database
Mnagement System. Este software actúa como intermediario entre los usuarios y bases
de datos y disponen de todas las herramientas para poder crear, leer, actualizar y borrar
datos de manera amigable. Los DBMS más populares en el mercado son MySQL,
PostgreSQL y Oracle Database y Microsoft SQL Server entre otros.

MySQL es un motor de gestión de bases de datos relacional de código abierto


Código abierto: Software que se crea para que sea de forma gratuita, diseño público,
cualquier persona con conocimiento de programación, puede acceder a su código fuente
y modificarlo y mejorarlo
MySQL Workbench: Es una herramienta visual y un entorno integral de desarrollo. Es una
herramienta gráfica que nos permite interactuar con las bases de datos MySQL.

En la pestaña Query se escribe el código SQL.


Este es el menú principal de MySQL Workbench. A la izquierda tenemos la pestaña de
Administración con el nombre de “Navigator”, donde vamos a encontrar información
sobre nuestro servidor y nos ayuda a administrar nuestra base de datos.
1. Server Status: Visión general del estado de nuestro servidor
2. Client connections: Conexiones dentro de nuestro servidor
3. Data export: Muy importante, nos ayuda a guardar información de nuestra base de
datos en un determinado archivo o directorio
4. Data import: Igual de importante, nos permite utilizar el backup que guardamos en
data export para recuperar información
Los dos sirven básicamente para realizar copias de seguridad de nuestros datos y
restaurarlos si necesario
Schemas los Schemas son las bases de datos en nuestro servidor. Lo que aparece
ahí con el nombre de “sys” es una base de datos por defecto con diferentes atributos,
pero el que nos interesa principalmente es Tablas
Bases da datos segunda definición: Colección organizada de información
Creación de bases de datos
1. Dirigirnos a Schemas
2. Click derecho y “Create Schema”

3. Se nos abrirá una pestaña y en esa pestaña colocaremos el nombre de


nuestra Database y una vez nombrado, damos click en “Apply”
4. Una vez hecho esto, MySQL Workbench nos traduce esto que quisimos hacer
y nos crea una base de datos, pero traducido en código SQL

CREATE SCHEMA se encuentra escrito en azul, ya que lo reconoce como que


declaramos que queremos crear esta base de datos
‘blogdatabase’ lo marca con un color distinto ya que lo reconoce como el nombre
de nuestra base
; Stop al código
5. Aquí podemos ver como ya se creó nuestra base de datos “blogdatabase” en
Schemas

Ahora que ya creamos una base de datos, lo que queremos es crear tablas
Creación de tablas
1. Nos situamos dentro de la opción de tablas en nuestra base de datos, hacemos
click derecho y “Create Table”

2. Ahora nombraremos a la tabla y en “Column Name” es donde vamos a definir las


diferentes columnas que tendrá la tabla como en un archivo Excel. El siguiente
ejemplo de screenshot es muy importante

En este screenshot podemos ver que seleccionamos las opciones de PK y NN


PK: Primer Key, esto es un campo o combinación de campos (columna o combinación de
columnas) que identifican de forma única a cada fila de una tabla. Esto quiere decir que
UserID será la columna que contenga los campos (valores) que identifiquen de forma
única a cada usuario. Cada usuario tendrá un ID único, que no se puede repetir.
NN: Not Null, esto solo define que queremos que nuestros valores no sean nulos.
INT: Se refiere al tipo de dato ENTERO en este caso
Después pasamos a escribir las demás columnas, con el nombre de “Nombre” y este dato
será tipo VARCHAR(45), estos no los vamos a checkear como Not Null y Primer Key
VARCHAR: Tipo de dato, en este caso pueden ser diferentes tipos de datos
Date: Tipo de dato de fecha
AI: Autoincrementar, una característica muy útil que nos da la posibilidad de generar
automáticamente un valor único de clave primaria para cada registro en una tabla.
Es decir, va a tomar el último valor de UserID en este caso y le va a sumar uno, cada vez
que agreguemos algún registro.

Y nos lo va a traducir a código SQL. Ahora ya podemos ver la tabla creada en Schemas

Si queremos consultar el contenido de esta tabla, hacemos doble click en BlogDataBase y


ejecutamos el siguiente código:
SELECT * FROM usuarios
Traducción: Seleccionar todas las columnas de la tabla Usuarios
Ejecutamos el código con el símbolo del Rayito
3. Vamos a crear un tabla nueva dando click en “blogdatabase”, y click derecho en
“tablas” y seguiremos los mismos pasos de la tabla pasada pero con diferentes
nombres, que se verá de la siguiente forma.

4. Creamos una última tabla llamada “comentarios” con los siguientes contenidos en
sus respectivas columnas. Comment ID, Post ID, User ID, Contenido y
FechaComentario.

Ahora introduciremos un nuevo concepto el cual es Clave foránea o Foreign Key.


Foreign Key: Es una columna o conjunto de columnas en una tabla cuyos valores
corresponden a los valores de la clave primaria de otra tabla. Para poder añadir una fila
con un valor de clave foránea especifico, debe existir una fila en la tabla relacionada con
el mismo valor de clave primaria.
Resumen:Una columna que hace referencia a la columna de otra tabla
Ejemplo práctico: En la tabla de Usuarios, tenemos la columna de UserID que es la clave
primaria de usuarios.
El mismo campo (User ID) en la tabla de Comentarios va a ser una clave foránea que
hace referencia a User ID en la tabla de Usuarios
Pero, ¿cómo le decimos esto a MySQL Workbench?
Lo que le queremos decir: UserID es una clave foránea que está relacionada con el
UserID de la tabla de usuarios y a su vez también que PostID es otra clave foránea que
está relacionada con el Post ID de la tabla publicaciones.
1. Nos vamos a la tabla Comentarios y hacemos click derecho y seleccionamos
Alter Table
2. Nos vamos a la sección de Foreign Keys y creamos una Foreign Key llamada
UserID
3. Y seleccionamos a qué tabla hace referencia User ID, que en este caso es
Usuarios de BlogDatabase
4. Luego seleccionamos a qué columna está referenciado, que en este caso es User
ID

Nos aparece el siguiente mensaje, pero solo debemos irnos a UserID que tenemos en
nuestra tabla de comentarios y lo transformamos a un número entero y li mismo con
PostID
5. Después de haber convertido a enteros, estos dos valores, nos regresamos a
Foreign Key y hacemos lo que estábamos intentando antes y ahora si nos dejará y
le damos Apply
6. Ahora agregamos la nueva clave foránea Post ID, relacionada con Publicaciones
y relacionamos PostID con Post ID .

¿Cómo insertar datos en una tabla?


Vamos a escribir en Query (Editor de consultas de SQL) el siguiente código. Nótese
que no definimos la columna UserID, asumiendo que la configuración autoincrementar
que definimos en el momento de crear la tabla y la primer key UserID, al ser
autoincrementar, directamente le asignará un valor a UserID.
INSERT INTO usuarios (Nombre, E mail, FechaRegistro) VALUES
(‘El nombre que sea’, ‘elemail@quesea’, ‘año-mes-día’)

Ahora solo debemos consultar el contenido de la tabla de usuarios de la siguiente


forma:
SELECT * FROM usuarios
Y podemos apreciar como UserID se generó automáticamente
Ejercicio 1: Netflix Database
Abrimos un workbench y seleccionamos File y después Open SQL File y
seleccionamos el archivo de Netflix que descargamos con _schema y se verá así:

CREATE DATABASE IF NOT EXIST significa que generará automáticamente la base


de datos NetflixDB y la siguiente fila (USE NetflixDB;) significa que use NetflixDB. En
todo lo demás está creando tablas.
1. Tabla de series
2. Tabla de episodios
3. Tabla de actores
4. Tabla de actuaciones
Las tablas estarán definidas por diferentes columnas y diferentes y diferentes campos
como “Serie ID” (Clave primaria autoincremental), “Título”, “Descripción”, “Año de
lanzamiento” y “Género”.
La siguiente tabla “Episodio ID” (Primary Key, Autoincrement ), “Serie ID”, “Titulo”,
“Duración”, “Serie ID” (Foreign K) referenciando a la tabla “Series” de Series ID. Y por
último las tablas “Actores” y “Actuaciones”
AHORA procedemos a insertar los datos dentro de nuestra tabla. Ahora para importar
estos archivos, iremos a “File” y “Open SQL Script”.
Nota: Aunque ya se haya cargado la información, hay que hacer click en RUN CODE para
que la cargue definitivamente

Y ahora podemos hacer una prueba para que nos arroje los resultados de búsqueda que
queramos, como el siguiente ejemplo.

Nota: Antes de crear una tabla se crea un nuevo esquema


Durante el ejercicio, mi único error fue llamarles con el mismo nombre a todas las Foreign
Key y ninguna Foreign Key puede tener el mismo nombre.

Consultas básicas en SQL


Sentencia SELECT
¿Qué significa Query?
Query = Consulta
Query en SQL = Hacer una pregunta a una base de datos para obtener información a
cambio. Esta pregunta la vamos a realizar utilizando un código SQL con lo que se
denominan sentencias
Select: Nos permite seleccionar columnas y datos de una base de datos. Nos permite
definir cuales son las columnas que queremos seleccionar de una determinada tabla.
En el siguiente ejemplo vamos a seleccionar todas las columnas de una tabla, sin
distinción. Todas las columnas de dicha tabla.

Ahora supongamos que solo queremos obtener EpisodioID, es decir, una sola columna. Y
se haría de la siguiente forma:
SELECT episodio_id FROM netflixdb.episodios
Es muy lógico, pero si quisiéramos expandir la consulta a más de una columna, solo
tenemos que agregar una coma entre las distintas columnas.
SELECT episodio_id, titulo, duracion FROM netflixdb.episodios

Nota: También podemos utilizar las sentencias SELECT, FROM, o las que sean en
minúscula pero por buenas prácticas no lo haremos. Ya que esto nos dará coherencia en
nuestro código y nos ahorrará trabajo al ser organizados en códigos más largos
Si queremos exportar los resultados de nuestra consulta, debemos seleccionar la opción
export y seleccionar donde queremos guardar nuestro archivo.
Clausula DISTICT
DISTICT Nos permite seleccionar valores únicos de una determinada columna. Hasta
ahora solo sabíamos seleccionar columnas completas o tablas completas, pero en
nuestros resultados de las consultas pasadas podíamos observar que los valores se
repetían aunque el resultado ya hubiera arrojado estos. Ejemplo: SELECT genero FROM
series

Y vemos que hay datos repetidos. Pero en el caso que queramos obtener géneros únicos,
debemos utilizar DISTICT y no los duplicados. De la siguiente forma.
SELECT DISCTICT genero FROM netflixdb.series
Y así obtendremos valores únicos de la columna género de la tabla netflixdb
Cláusula ORDER BY
ORDER BY nos ayuda a ordenar los datos que obtenemos a partir de una consulta. A
continuación se muestra una consulta donde se ve que queremos obtener los nombres de
los episodios de las series y su duración en minutos. Mostraremos dos ejemplos, uno sin
utilizar ORDER BY, en el que nos arroja resultados sin un orden y uno con ORDER BY en
el que nos organiza los resultados de mayor a menor duración.
SELECT titulo, duracion FROM netflixdb.episodios
SELECT titulo, duracion FROM netflixdb.episodios ORDER BY duracion DESC

Orden de cláusulas y sentencias que hemos visto hasta ahora


1. SELECT y DISTINCT
2. FROM
3. ORDER BY
Podemos ordenar de manera descendente (desc) o de manera ascendente (asc)
Normalmente utilizamos ORDER BY con integers o números pero también lo podemos
utilizar con letras y nos va a ordenar de manera alfabética. Ejemplo.
Clausula LIMIT
Existen casos donde queremos limitar la cantidad de resultados obtenidos de nuestras
consultas y no sobrecargar el output (salidas). En el siguiente ejemplo vamos a
seleccionar toda una tabla pero vamos a limitar a 10 filas la salida.
SELECT * FROM episodios LIMIT 10
Y el output es el siguiente:

Nota: LIMIT va después de ORDER BY, y el ranking de acomodo se actualiza y queda de


la siguiente forma.
1. SELECT y DISTINCT
2. FROM
3. ORDER BY
4. LIMIT
A continuación se pone un ejemplo del uso de todas las sentencias y clausulas que
llevamos hasta ahora, con el siguiente código
SELECT DISTINCT titulo, duracion FROM netflixdb.episodios ORDER BY duracion ASC
LIMIT 30

Clausula WHERE
Nos ayuda a filtrar los resultados, es decir, definir una condición para solo obtener los
resultados que cumplan con la condición de que nosotros definamos.
Ejemplo: Queremos hacer una consulta en la tabla Series en la que queremos obtener
todas las series pero del género Drama. Para ese caso utilizaríamos el siguiente código:
SELECT * FROM Series WHERE Genero = ‘Drama’
Otro ejemplo: Queremos obtener datos de series que el año de lanzamiento sea mayor a
2010
SELECT * FROM Series WHERE año_lanzamiento > 2010

Operadores de Comparación
Los operadores de comparación se utilizan para comparar valores en una consulta. Son
fundamentales para establecer condiciones en clausulas como WHERE, permitiendo filtrar
los resultados en una consulta basada en dichas comparaciones, los operadores son los
siguientes:
 = Igualdad
 <> Desigualdad. Compara que los valores no sean iguales, es decir, tráeme solo
estos resultados si este campo es distinto a este otro campo
 < Menor que. Comprueba si el valor de la izquierda es menor al valor de la
derecha
 > Mayor que. Lo mismo pero viceversa
 <= Menor igual que. Comprueba si el valor de la izquierda es enor o igual al de la
derecha
 >= Mayor igual que. Viceversa
Ejemplo: Queremos obtener series que se lanzaron antes del año 2015. El código sería el
siguiente:
SELECT * FROM netflixdb.Series WHERE año_lanzamiento < 2015

Ejercicio: Queremos realizar una consulta en la que nos arroje únicamente título y año de
lanzamiento de Series después del 2020:
SELECT titulo, año_lanzamiento FROM netflixdb.Series WHERE año_lanzamiento > 2020

Operadores Lógicos
En algunos casos vamos a necesitar aplicar más de una sola condición y al mismo tiempo
definir como estas condiciones interactúan entre sí, para eso son los operadores lógicos,
los cuales son los siguientes:
 AND: Lo utilizamos cuando queremos que se cumplan dos o más condiciones
Ejemplo: Queremos una consulta que solo nos arroje series que tengan una duración
de capítulos mayor a 30 y el rating de IMDB mayor a 8.
SELECT titulo, duracion, rating_imdb FROM netflixdb.episodios WHERE duracion >
30 AND rating_imdb > 8

 OR: Lo utilizamos cuando queremos que se cumpla una u otra condición, no que
se cumplan las dos al mismo tiempo
 NOT: Lo utilizamos cuando queremos que una condición no cumpla con ciertas
características
Nota: El comando NOT se utiliza con WHERE para incluir solo filas donde una
condición es verdadera
Ejemplo: Queremos encontrar los episodios que tengan una mayor duración a 45
minutos y un rating IMDB mayor o igual a 9
SELECT titulo, duracion, rating_imdb FROM netflixdb.episodios
WHERE duracion > 45 AND rating_imdb >= 9
Ejemplo 2: Queremos seleccionar series donde el genero sea comedia o animación
SELECT * FROM netflixdb.series
WHERE genero = 'Comedia'
OR genero = 'Animación'
Clausula IN/NOT IN
En SQL muchas veces podemos obtener el mismo resultado a través de caminos
distintos. Por ejemplo, haremos una consulta en la que obtendremos todas las series que
no sean de comedia, pero sin el operador de comparación <> y en cambio utilizando NOT
IN.
SELECT titulo, genero FROM netflixdb.series
WHERE genero NOT IN ('Comedia')
Si queremos obtener el resultado opuesto (solo las series dentro de comedia), debemos
cambiar NOT IN por IN
SELECT titulo, genero FROM netflixdb.series
WHERE genero IN ('Comedia')
Clausula LIKE
Imaginemos que queremos encontrar todas las series que contiene una “the” en su título,
es un escenario donde podemos utilizar LIKE.
La cláusula LIKE te permite utilizar patrones, utilizando caracteres comodín, los cuales
son % y LIKE encuentra esos caracteres en una determinada cadena de texto. Esto se
utiliza muy a menudo para analizar columnas que tengan contenido de texto.
Ejemplo:
SELECT titulo, genero, descripcion FROM netflixdb.series
WHERE titulo LIKE ('%The%')

Nota muy importante: Si solo colocamos un signo de porcentaje al final ‘The%’. SQL va a
seleccionar todas las entradas de la tabla series cuyos títulos comiencen con The.
Por otro lado, si nosotros colocamos el signo únicamente al principio ‘%The’, solamente
seleccionará todas las filas cuyo título terminen en The.
NOT IN hace lo contrario, busca entradas de datos que no contengan aquel carácter que
le estamos pidiendo.
Aquí realizaremos una consulta en la que queremos que nos arroje todos los títulos que
no contengan la letra ‘a’
SELECT titulo, genero, descripcion FROM netflixdb.series
WHERE titulo NOT LIKE ('%a%')
Funciones de Agregado
Son funciones esenciales para todo científico o analista de datos. Estas funciones nos
permiten realizar cálculos sobre un conjunto de valores y devolver un único valor.
Ejemplo: Queremos saber la duración total de contenido que hay en nuestra base de
datos
SELECT SUM(duracion)
FROM netflixdb.episodios

Nota: El título de esta columna se llama “SUM(duración”) poque nunca definimos ningún
nombre o alias a la operación. Pero en caso de que quisiéramos hacerlo, debemos utilizar
la cláusula AS después del SUM

Ejemplo combinado: Queremos obtener la suma de la duración en minutos solo de una


determinada serie
SELECT SUM(duracion) AS suma_duracion
FROM netflixdb.episodios
WHERE serie_id = 4
COUNT
Cuenta la cantidad de elementos que hay en un campo
Ejemplo: El siguiente código cuenta la cantidad total de filas que tenemos en nuestra tabla
SELECT COUNT(*) FROM netflixdb.episodios

Otro ejemplo: Pondremos una condición en la que cuente las filas en donde Serie id sea 2
SELECT COUNT(*) FROM netflixdb.episodios
WHERE serie_id = 2
Este resultado lo comprobamos quitando el COUNT y viendo como obtenemos 23 filas
como resultado
MAX
Dentro de COUNT también existe MAX, el cual nos ayuda a obtener el valor máximo de
una determinada columna.
Ejemplo: Queremos obtener el valor máximo de duración de los episodios con el id 2
SELECT MAX(duracion) FROM netflixdb.episodios
WHERE serie_id = 2

Lo mismo pasa con la función MIN pero contando mínimos


Average
Nos da el promedio de lo que nosotros le solicitemos
Ejemplo: Queremos obtener el promedio de duración de todos los episodios
SELECT AVG(duracion) FROM netflixdb.episodios

Otro ejemplo: Queremos obtener el promedio de duración de los episodios con serie_id 1
y2
SELECT AVG(duracion) FROM netflixdb.episodios
WHERE serie_id IN (1,2)

Clausula GROUP BY
Esta función agrupa resultados bajo valores únicos y es fundamental para comprender
como trabajar con datps agregados y proporciona una podetosa herramienta para el
análisis.
Agrupa filas que tienen los mismos valores en filas de resumen como “buscar la cantidad
de episodios de cada serie” .
Ejemplo: Queremos saber el promedio de duración para cada serie con ID 1 y 2 y obtener
el resultado con la leyenda “promedio” y utilizamos la última función aprendida (AVG)
únicamente
SELECT serie_id, AVG(duracion) AS promedio
FROM episodios
WHERE serie_id IN (1,2)
Esto nos arrojará un error y SQL nos dice que estamos corriendo una consulta de
agregación, pero sin agregar una columna de categoría (serie_id)
Aquí es donde entra GROUP BY. Escribiendo esta cláusula, agrupamos los resultados
por serie y vamos a obtener como resultado el promedio de la serie 1 y la serie 2.
Golden Rule: GROUP BY siempre debe estar acompañado del nombre de la columna a la
cual queremos agrupar
Ejemplo 2: Queremos que también nos de la suma
SELECT serie_id, AVG(duracion) AS promedio, SUM(duracion) AS suma_duracion
FROM netflixdb.episodios
WHERE serie_id IN (1,2)
GROUP BY serie_id

Resumen: GROUP BY agrupa resultados en función de las columnas que definamos en


este GROUP BY
Ejemplo 3: Queremos obtener serie_id de la tabla episodios, observaremos como
obtenemos todos los valores duplicados
SELECT serie_id FROM netflixdb.episodios
Si queremos resultados no repetidos, podríamos utilizar DISTICT pero utilizaremos
GROUP BY
SELECT serie_id FROM netflixdb.episodios
GROUP BY 1

Nota super importante: El número que va a lado de GROUP BY, siempre será la columna
que estamos seleccionando. En este caso únicamente escribimos serie_id, por lo que el
número únicamente se puede poner 1. Si tuviera 2 columnas, escribo 1,2 en lugar de solo
2
Ejemplo 4: Queremos contar la cantidad de episodios que hay en cada uno de estas
series
SELECT serie_id, COUNT(episodio_id)
AS count_episodios
FROM netflixdb.episodios GROUP BY serie_id

Este GROUP BY está agrupando los resultados por serie_id, es decir, solamente vamos
a tener un valor único por cada serie existente y vamos a contar cuantos episodios hay en
cada una de estas series.
Podemos no poner el nombre de la columna y únicamente poner 1
SELECT serie_id, COUNT(episodio_id)
AS count_episodios
FROM netflixdb.episodios GROUP BY 1
El 1 hace referencia a la columna
Ejemplo 5: Queremos obtener por serie_id, cual es el valor máximo de duración de cada
una de las series
SELECT serie_id, MAX(duracion)
FROM netflixdb.episodios
GROUP BY 1
Obtuvimos el máximo de cada uno de los series_id.
Nota: Si cualquiera de los códigos de ejemplo que escribimos, no tuviera el GROUP BY,
estos no se podrían correr ya que la expresión que definimos al principio (serie_id) no
está agrupada
Ejercicio: Escribe una consulta SQL que seleccione el año de lanzamiento de las series
en la tabla Series , y cuenta el número de series lanzadas en cada año

Clausula HAVING
Nos permite filtrar datos agrupados en función de condiciones específicas. A diferencia de
WHERE que filtra filas antes de agruparlas, HAVING aplica el filtro después del
agrupamiento
Diferencias:
WHERE: Se puede usar con o sin GROUP BY ya que filtra filas antes de ser agrupadas
HAVING: Debe ir con GROUP BY
Ejemplo: Queremos encontrar todas las series de netflixbd que tienen más de 10
episodios en total

SELECT serie_id, COUNT(episodio_id)


AS numero_de_episodios
FROM netflixdb.episodios
GROUP BY serie_id
HAVING COUNT(episodio_id) > 10

Nota: El WHERE siempre va antes del GROUP BY ya que afecta a las filas previo a
realizar cualquier tipo de agregación. Y solo se utiliza HAVING sobre funciones de
agregación como COUNT en este caso

También podría gustarte