maravillosa clase, el profe tiene muy buena pedagogía y empatia, se merece una cerveza donde lucho
Bienvenida conceptos básicos y contexto histórico de las Bases de Datos
Bienvenida conceptos básicos y contexto histórico de las Bases de Datos
Playground: tu primera consulta en bases de datos
Introducción a las bases de datos relacionales
Historia de las bases de datos relacionales
Qué son entidades y atributos
Entidades de Platzi Blog
Relaciones
Múltiples muchos
Diagrama ER
Diagrama Físico: tipos de datos y constraints
Diagrama Físico: normalización
Formas normales en Bases de Datos relacionales
Diagrama Físico: normalizando Platziblog
RDBMS (MySQL) o cómo hacer lo anterior de manera práctica
¿Qué es RDB y RDBMS?
Instalación local de un RDBMS (Windows)
Instalación local de un RDBMS (Mac)
Instalación local de un RDBMS (Ubuntu)
Clientes gráficos
Servicios administrados
SQL hasta en la sopa
Historia de SQL
DDL create
Playground: CREATE TABLE
CREATE VIEW y DDL ALTER
DDL drop
Playground: VIEW, ALTER y DROP en SQL
DML
Playground: CRUD con SQL
¿Qué tan standard es SQL?
Creando Platziblog: tablas independientes
Creando Platziblog: tablas dependientes
Creando Platziblog: tablas transitivas
Consultas a una base de datos
¿Por qué las consultas son tan importantes?
Estructura básica de un Query
SELECT
Playground: SELECT en SQL
FROM y SQL JOINs
Utilizando la sentencia FROM
Playground: FROM y LEFT JOIN en SQL
WHERE
Utilizando la sentencia WHERE nulo y no nulo
Playground: Filtrando Datos con WHERE
GROUP BY
ORDER BY y HAVING
Playground: Agrupamiento y Ordenamiento de Datos
El interminable agujero de conejo (Nested queries)
¿Cómo convertir una pregunta en un query SQL?
Preguntándole a la base de datos
Consultando PlatziBlog
Playground: Prueba Final con PlatziBlog
Introducción a la bases de datos NO relacionales
¿Qué son y cuáles son los tipos de bases de datos no relacionales?
Servicios administrados y jerarquía de datos
Manejo de modelos de datos en bases de datos no relacionales
Top level collection con Firebase
Creando y borrando documentos en Firestore
Colecciones vs subcolecciones
Recreando Platziblog
Construyendo Platziblog en Firestore
Proyecto final: transformando tu proyecto en una db no relacional
Bases de datos en la vida real
Bases de datos en la vida real
Big Data
Data warehouse
Data mining
ETL
Business intelligence
Machine Learning
Data Science
¿Por qué aprender bases de datos hoy?
Bonus
Bases de datos relacionales vs no relacionales
Elegir una base de datos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Israel Vázquez Morales
GROUP BY tiene que ver con agrupación. Indica a la base de datos qué criterios debe tener en cuenta para agrupar.
Aportes 263
Preguntas 46
maravillosa clase, el profe tiene muy buena pedagogía y empatia, se merece una cerveza donde lucho
Aparte de la función COUNT, podemos encontrar las siguientes funciones de agregado:
AVG Calcula el promedio
COUNT Cuenta los registros de un campo
SUM Suma los valores de un campo
MAX Devuelve el maximo de un campo
MIN Devuelve el mínimo de un campo
La mejor pedagogía hasta el momento en los cursos de Plazi que he realizado, sin darme cuenta ya casi termino el curso, FELICITACIONES al profesor 😄
Resumen escrito.
esta bueno el curso, pero siento que debimos haber ingresado todos los datos en la base de datos para hacerla mas dinamica, y dejar tareas para la siguiente clase, no pude ingresar todos los descargables porque tampoco explicaron como hacerlo.
El lenguaje SQL tiene funciones incorporadas para hacer cálculos sobre los datos. Las funciones se pueden dividir en dos grupos (existen muchas mas, que dependen del sistema de bases de datos que se utilice):
Funciones agregadas SQL, devuelven un sólo valor, calculado con los valores de una columna.
AVG() - La media de los valores
COUNT() - El número de filas
MAX() - El valor más grande
MIN() - El valor más pequeño
SUM() - La suma de los valores
GROUP BY - Es una sentencia que va muy ligada a las funciones agregadas
Funciones escalares SQL, devuelven un sólo valor basándose en el valor de entrada.
UCASE() - Convierte un campo a mayúsculas
LCASE() - Convierte un campo a minúsculas
MID() - Extrae caracteres de un campo de texto
LEN() - Devuelve la longitud de un campo de texto
NOW() - Devuelve la hora y fecha actuales del sistema
FORMAT() - Da formato a un formato para mostrarlo
SELECT estatus, COUNT(*) post_quantity
FROM posts
GROUP BY estatus;
SELECT YEAR(fecha_publicacion) AS post_year, COUNT(*) AS post_quantity
FROM posts
GROUP BY post_year;
SELECT estatus,MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY estatus, post_month;
Apuntes:
GROUP BY nos permite hacer consultas mucho mas organizadas, de manera que la consulta se ejecuta dividida por los diferentes valores que posee la columna, de esta manera podemos determinar no solo el número de valores diferentes que puede tener un atributo, sino muchos otros parámetros como la cantidad de los mismos (con COUNT(*)).
También pueden probar la sentencia WITH ROLLUP después de GROUP BY. Es muy interesante, ya que aporta la suma total de la consulta dada por la sentencia COUNT.
Note que en el primer ejemplo no puso as para nombrar post_quality y funciono.
Algo útil:
Las funciones de grupo, como COUNT, SUM, AVG, etc., devuelven solo 1 fila (el resultado). Teniendo en cuenta esto:
Ejemplo del error:
Forma correcta:
Tal vez parezca obvio pero es un error muy común que se suele cometer. Ojalá les sirva.
Es totalmente verídico, llevo 10 años en corporaciones y se nota la diferencia cuándo un senior le presenta información a las directivas a cuándo lo hacen los cargos más operativos o sin experiencia. Los directivos no quieren ver por menores, ellos quieren ser concisos y saber qué está afectando las actividades, causas y soluciones. Los pormenores técnicos son importantes pero no todos en el entorno son programadores o ven el negocio desde el punto de vista del desarrollador.
Aporte: Funciones de MySQL para varios usos en los Querys, en la documentacion se explican como funciona cada uno, la idea es buscar algo que necesitemos para no pensar en como crearlo, la mejor forma es “no reinventar la rueda”
28. Mis apuntes sobre: “GROUP BY”
GROUP BY es un comando para agrupar de manera funcional.
-1. Ejemplo de Código SQL GROUP BY: Cuántos post hay en base al estado
SELECT estatus,
COUNT(*) AS post_quantity
FROM posts
GROUP BY estatus;
Explicación 1: SELECT estatus, <<mostrar todos los resultados del campo estatus>>
COUNT(*) AS post_quantity <<contar la cantidad de registros y poner el valor en un campo llamado post_quantity>>
GROUP BY estatus; <<mostrarlos de manera agrupada en base al valor del campo estatus>>
-2. Ejemplo de Código SQL GROUP BY 2: Cuántos posts se generaron por año
SELECT YEAR(fecha_publicacion) AS post_year,
COUNT(*) AS post_quantity
FROM posts
GROUP BY post_year;
Explicación 2: SELECT YEAR(fecha_publicacion) AS post_year, <<mostrar todos los resultados del año del campo fecha_publicación nombrando el campo como post_year>>
COUNT(*) AS post_quantity <<contar la cantidad de registros y poner el valor en un campo llamado post_quantity>>
GROUP BY post_year; <<mostrarlos de manera agrupada en base al valor del campo post_year extraído del SELECT>>
-3. Ejemplo de Código SQL GROUP BY 3: Cuántos posts se generaron por mes, mostrando el nombre del mes
SELECT MONTHNAME(fecha_publicacion) AS post_month,
COUNT(*) AS post_quantity
FROM posts
GROUP BY post_month;
Explicación 3: SELECT MONTHNAME(fecha_publicacion) AS post_month, <<mostrar todos los resultados del mes del campo fecha_publicación como el nombre del mes, nombrando el campo como post_month>>
COUNT(*) AS post_quantity <<contar la cantidad de registros y poner el valor en un campo llamado post_quantity>>
GROUP BY post_month; <<mostrarlos de manera agrupada en base al valor del campo post_month extraído del SELECT>>
-4. Ejemplo de Código SQL GROUP BY 4
SELECT estatus, MONTHNAME(fecha_publicacion) AS post_month,
COUNT(*) AS post_quantity
FROM posts
GROUP BY estatus, post_month;
Explicación 3: SELECT estatus, MONTHNAME(fecha_publicacion) AS post_month, <<mostrar todos los resultados del campo estatus, y del mes del campo fecha_publicación como el nombre del mes, nombrando el campo como post_month>>
COUNT(*) AS post_quantity <<contar la cantidad de registros y poner el valor en un campo llamado post_quantity>>
GROUP BY post_month; <<mostrarlos de manera agrupada en base al valor del campo post_month extraído del SELECT>>
este es uno de los que más me gusta, me acuerda mucho a las tablas dinámicas de excel
Algo mas de Group by
https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html
Yo recomendaría que guardaran todos los scripts que estamos haciendo para que después puedan repasar algunas cositas. Este curso lo tomé hace 3 meses y ahorita estoy volviendolo a tomar porque no guardé nada de lo que había hecho y se me olvidaron muchas cosas. Y lo necesito porque debo conectarme a una base de datos con JDBC y ejecutar algunos querys… y pues eso.
¿Cual es la diferencia entre COUNT(*) y COUNT(1)?
Consultar todas las facturas de venta pendientes de cobro y agrupadas por cliente y trimestre.
SELECT
p.name,
EXTRACT(QUARTER FROM inv.create_date) AS quarter,
count(*) AS number,
SUM(inv.amount_total) AS total
FROM account_invoice AS inv
INNER JOIN res_partner AS p ON inv.partner_id = p.id
WHERE inv.state LIKE 'open'
AND inv.type LIKE 'out_invoice'
GROUP BY p.name, quarter
ORDER BY p.name, quarter;
Podemos agregar modificadores a la cláusula GROUP BY para generar informes más detallados
SELECT YEAR(fecha_publicacion) AS año, estatus, COUNT(*) FROM posts
WHERE YEAR(fecha_publicacion) > 2023
GROUP BY año, estatus WITH ROLLUP;
order by importante para el ordenamiento de los registros
Lista de Funciones de tiempo y fecha en MySQL entre otros, es la documentación de MySQL
puede pasar algo catastrofico si tengo instalado sql y despues quiero instalar XAMPP?
Mis notas:
-- Cuenta la cantidad de registros agrupados por estatus
SELECT estatus, COUNT(*) AS post_quanty
FROM posts
GROUP BY estatus;
-- Cuenta los post que se realizaron por año (Agrupa el nuevo campo creado)
SELECT YEAR(fecha_publicacion) AS post_year, COUNT(*) AS post_quanty
FROM posts
GROUP BY post_year;
-- Cuenta los post que se realizaron por meses sin importar el año (Agrupa el nuevo campo creado)
SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quanty
FROM posts
GROUP BY post_month;
-- Cuenta los post que se realizaron por meses sin importar el año y por estatus
SELECT estatus, MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quanty
FROM posts
GROUP BY estatus, post_month
ORDER by post_quanty ASC, post_month DESC; -- Ordena por cantidad de ppost de manera ascendente y por mes de manera descendente (El ASC no es necesario colocarlo ya que es por defecto)
-- Estos son las funciones más comunes para realizar una agrupación
-- AVG Calcula el promedio
-- COUNT Cuenta los registros de un campo
-- SUM Suma los valores de un campo
-- MAX Devuelve el maximo de un campo
-- MIN Devuelve el mínimo de un campo
Funciones de agrupación:
COUNT: devuelve el número total de filas seleccionadas por la consulta.
MIN: devuelve el valor mínimo del campo que especifiquemos.
MAX: devuelve el valor máximo del campo que especifiquemos.
SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
Agrupa las filas seleccionadas por la cláusula WHERE por los campos que aparecen en la cláusula GROUP BY. Estos grupos devuelven una única fila por grupo a la que se le pueden añadir una serie de funciones estadísticas llamadas agregados.
La herramienta de agrupación se hace más poderosa en cuanto más grande sea la base de datos que se trabaja.
MI RESUMEN:
La instruccion GROUP BY, agrupa las filas que tienen los mismos valores en filas de resumen, como por ejemplo saber cuantas personas han comprado un producto
El GROUP BY se utiliza a menudo con funciones de agregado (COUNT(), MAX(), MIN(), SUM(), AVG())
Sintaxis:
SELECT nombre_columna(s)
FROM nombre_tabla(s)
WHERE condicion
GROUP BY nombre_columna(s)
Mi consulta
Los usuarios que existen y cuantos posts han escrito cada uno.
Para saber cuantas etiquetas tiene cada post:
SELECT titulo, post_id, COUNT(post_id) AS etiquetas_del_post
FROM posts_etiquetas
LEFT JOIN posts ON posts.id=posts_etiquetas.post_id
GROUP BY post_id
Para ordenar por id de usuario, la cantidad de consumo total de acuerdo con los registros que tiene en la tabla de pedidos, sumando la columna costo total de cada registro asociado a dicho usuario.
SELECT usuario_id, SUM(costo_total) AS total_consumo
FROM pedidos
WHERE usuario_id IS NOT NULL
GROUP BY usuario_id;
Para los que se encuentren en SQL Server y necesiten que aparezca el nombre del mes se hace de la siguiente manera:
SELECT DATENAME(MONTH, fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY DATENAME(MONTH, fecha_publicacion);
Amig@s algunas consultas con GROUP BY donde incluí WHERE y BETWEEN.
-- Contar los posts y agruparlos por status.
select status, count(*) as Cant_Posts
from posts
group by status;
-- Sumar los Id y agruparlos por status.
select status, sum(id) as suma
from posts
group by status;
-- Contar y agrupar los posts por status donde su Id sea mayor o igual a 50
select status, count(*) as Cant_Posts
from posts
where id >= 50
group by status;
-- Contar y agrupar los posts por status donde su Id este entre 50 y 60.
select status, count(*) as Cant_Posts
from posts
where Id between 50 and 60
group by status;
-- Contar y agrupar los posts por año.
select year(fecha_publicacion) as Año, count(*) as Cant
from posts
group by Año;
-- Contar y agrupar los posts por el nombre del mes.
select monthname(fecha_publicacion) as Mes, count(*) as Cant
from posts
group by Mes;
-- Contar y agrupar los posts por el año y el nombre del mes.
select year(fecha_publicacion) as Año, monthname(fecha_publicacion) as Mes, count(*) as Cant
from posts
group by Año, Mes;
-- Contar y agrupar los posts por el status, año y el nombre del mes.
select status, year(fecha_publicacion) as Año, monthname(fecha_publicacion) as Mes, count(*) as Cant
from posts
group by status, Año, Mes;
Hola comunidad, comparto el siguiente aporte sobre otra funciones que se puede utilizar, entre otros.
Funciones:
COUNT: Contador
SQRT: Raíz cuadrada
SUM: Sumar
AVG: Promedio
MAX: Máximo
MIN: Mínimo
Operadores básicos:
= Igual
!= No igual
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
BETWEEN Dentro de un rango
Operadores Lógicos:
AND Cumple ambas condiciones
OR Cumple alguna condición
IN Cumple si es igual a la lista de expresiones
CONCAT Concatena 2 o mas campos
Otra Funciones:
UPPER Convierte a mayúscula
LOWER Convierte a minúscula
La regla para el GROUP BY es utilizar los mismos campos que utilizamos en el SELECT, ejemplo
SELECT status, MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY status, post_month;
En el caso del campo COUNT(), dicho campo no es necesario ponerlo en el GROUP BY, sino todos aquellos de los que queremos saber su contenido
La palabra clave DISTINCT
Este es un buen momento para hacer un paréntesis en la agrupación de datos y presentar la palabra clave: DISTINCT.
Con ella podemos eliminar filas redundantes de un resultado SQL, por lo que permite obtener los distintos valores de un campo existentes en una tabla o grupo de registros seleccionados.
Me encanta la clase. Gracias!!!
No es necesario colocar AS post_quantity luego de la función COUNT(*) post_quantity para agregarle un nombre a la columna.
Un poco de mi proyecto personal!!
SELECT ges.ID_SEGMENTO AS NUM_TIPO_SEGMENTO,
CONCAT(DATE_FORMAT(ges.FECHA_GESTION, '%Y%m%d'), '_', ges.ID, '_', ges.CREDITO, '_', ges.ID_USUARIO, '_', UPPER(REPLACE(TRIM(ges.GESTION), '|', ''))) AS CVE_UNICA,
ges.ID AS NUM_ID_GESTION, ges.CREDITO AS NUM_CREDITO, UPPER(TRIM(ges.ACREDITADO)) AS NOM_ACREDITADO,
ges.TIPO_GESTION AS NUM_TIPO_GESTION, ges.MEDIO_CONTACTO AS NOM_MEDIO_CONTACTO,
UPPER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(ges.GESTION), ' ', ' '), '/ ', '/'), ' /', '/'), '//', '/'), '|', '')) AS DES_GESTION,
ges.RESULTADO AS NOM_RESULTADO, ges.ESTATUS_CUENTA AS NOM_ESTATUS_CUENTA, CASE WHEN ges.SEGMENTO = 'Administratiba' THEN 'Administrativa'
ELSE ges.SEGMENTO
END AS NOM_SEGMENTO, ges.DELEGACION AS NOM_DELEGACION_CUENTA,
DATE_FORMAT(ges.FECHA_GESTION, '%Y%m%d') AS FCH_GESTION, ges.HORA_INICIO AS HRA_GESTION_INICIO,
ges.HORA_FIN AS HRA_GESTION_TERMINO, CASE WHEN LENGTH(tel.TELEFONO) = 8 THEN CONCAT(55, tel.TELEFONO)
ELSE tel.TELEFONO
END AS NUM_TELEFONO, UPPER(tel.TIPO_CONTACTO) AS NOM_TIPO_CONTACTO,
IFNULL(usr.ID, ges.ID_USUARIO) AS NUM_ID_GESTOR, CASE WHEN ges.CREDITO = pro.CREDITO THEN 2
WHEN ges.CREDITO = pag.CREDITO THEN 3
ELSE 1
END AS NUM_TIPO_PAGO, 0 NUM_TIPO_CONTACTO,
IFNULL(REPLACE(pro.MONTO, ',', ''), 0) AS IMP_PROMESA, IFNULL(TRIM(REPLACE(pro.FECHA, '-', '')), 0) AS FCH_PROMESA,
IFNULL(REPLACE(pag.MONTO1, ',', ''), 0) AS IMP_PROMESA_01, IFNULL(TRIM(REPLACE(pag.FECHA1, '-', '')), 0) AS FCH_PROMESA_01,
IFNULL(REPLACE(pag.MONTO2, ',', ''), 0) AS IMP_PROMESA_02, IFNULL(TRIM(REPLACE(pag.FECHA2, '-', '')), 0) AS FCH_PROMESA_02,
IFNULL(REPLACE(pag.MONTO3, ',', ''), 0) AS IMP_PROMESA_03, IFNULL(TRIM(REPLACE(pag.FECHA3, '-', '')), 0) AS FCH_PROMESA_03,
IFNULL(REPLACE(pag.MONTO4, ',', ''), 0) AS IMP_PROMESA_04, IFNULL(TRIM(REPLACE(pag.FECHA4, '-', '')), 0) AS FCH_PROMESA_04,
IFNULL(REPLACE(pag.MONTO5, ',', ''), 0) AS IMP_PROMESA_05, IFNULL(TRIM(REPLACE(pag.FECHA5, '-', '')), 0) AS FCH_PROMESA_05,
IFNULL(REPLACE(pag.MONTO6, ',', ''), 0) AS IMP_PROMESA_06, IFNULL(TRIM(REPLACE(pag.FECHA6, '-', '')), 0) AS FCH_PROMESA_06,
IFNULL(REPLACE(pag.MONTO7, ',', ''), 0) AS IMP_PROMESA_07, IFNULL(TRIM(REPLACE(pag.FECHA7, '-', '')), 0) AS FCH_PROMESA_07,
IFNULL(REPLACE(pag.MONTO8, ',', ''), 0) AS IMP_PROMESA_08, IFNULL(TRIM(REPLACE(pag.FECHA8, '-', '')), 0) AS FCH_PROMESA_08,
IFNULL(REPLACE(pag.MONTO9, ',', ''), 0) AS IMP_PROMESA_09, IFNULL(TRIM(REPLACE(pag.FECHA9, '-', '')), 0) AS FCH_PROMESA_09,
IFNULL(REPLACE(pag.MONTO10, ',', ''), 0) AS IMP_PROMESA_10, IFNULL(TRIM(REPLACE(pag.FECHA10, '-', '')), 0) AS FCH_PROMESA_10,
IFNULL(REPLACE(pag.MONTO11, ',', ''), 0) AS IMP_PROMESA_11, IFNULL(TRIM(REPLACE(pag.FECHA11, '-', '')), 0) AS FCH_PROMESA_11,
IFNULL(REPLACE(pag.MONTO12, ',', ''), 0) AS IMP_PROMESA_12, IFNULL(TRIM(REPLACE(pag.FECHA12, '-', '')), 0) AS FCH_PROMESA_12
FROM GESTION_LLAMADAS AS ges LEFT JOIN USERS AS usr ON ges.ID_USUARIO = usr.ID
LEFT JOIN PROMESA_PAGO AS pro ON ges.ID = pro.ID_GESTION
LEFT JOIN TELEFONOS AS tel ON ges.ID = tel.ID_GESTION
AND ges.CREDITO = tel.CREDITO
LEFT JOIN PLAN_PAGOS AS pag ON ges.ID = pag.ID_GESTION
WHERE tel.TELEFONO IS NOT NULL
AND ges.FECHA_GESTION BETWEEN FECHA1 AND FECHA2;
https://josejuansanchez.org/bd/ejercicios-consultas-sql/index.html#base-de-datos-para-mysql
encontre este genial recurso donde pueden practicar ejecicios de mysql , muy recomendado
En este sitio hay una buena explicación de funciones básicas complementarias a las que hemos visto
Si quieren practicar ejemplos de consultas en bases de datos SQL, pueden ir a HackerRank. Abarcan demasiados problemas con ejemplos para practicar uniones, agrupaciones, etc. y para buscar cómo solucionarlos w3schools puede ayudar mucho.
USE platziblog;
SELECT estatus, COUNT(*) AS post_quantity
FROM posts
GROUP BY estatus;
USE platziblog;
SELECT YEAR(fecha_publicacion) AS post_year, COUNT(*) AS post_quantity
FROM posts
GROUP BY post_year;
USE platziblog;
SELECT MONTH(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY post_month;
USE platziblog;
SELECT estatus, MONTH(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY estatus, post_month;
El profesor Israel ha sido el mejor profe que he tenido en los cursos que he hecho en platzi.
intente combinar la sentencia de count y group by con where asi quedó
Para el caso de platziblog, ¿cómo sería para poder ver cuántos posts hay de cada categoría?
Estoy haciendo esto:
SELECT categoria_id, count(*) as cantidad
FROM posts
group by categoria_id
Pero me sale el id de la categoría… cómo sería para ver el nombre de la categoría?
hice uno de los ejemplos que mencionaba al principio ¿cuantos posts hay por categoria?
Para rankear los usuarios por numero de posts escritos
select usuario_id as usuario, count(*) as posts
from posts
where usuario_id is not null
group by usuario
order by posts DESC;
Tiene que ver con agrupación. Indica a la base de datos qué criterios debe tener en cuenta para agrupar.
.
Ejemplo:
.
SELECT estatus, COUNT() post_quantity
FROM posts
GROUP BY estatus; (Este nos agrupa por activo e inactivo)
.
La sentencia GROUP BY tiene que ver con informes, para una decisión rapida.
.
SELECT MONTHNAME(fecha_publicacion) AS POST_MONTH, count() AS POST_QUANTITY
FROM posts
GROUP BY POST_MONTH;
Excelente clase, tenia conocimiento de este componente, me gusto la manera como explica los conceptos y mas con los ejemplos, muchas gracias.
Cuando tomé mi curso de DB en la Universidad y casi me la hecho por la pésima enseñanza, ya cuando sales y trabajas o tomas éste tipo de cursos, ves que era una bobada, y que por ello te andaban reprobando.
Me parece que el profesor no lo menciono, pero la sentencia ‘AS’ se puede omitir dejando un espacio delante de la palabra.
Ej. SELECT estatus est, COUNT(*) num_est
FROM posts
GROUP BY est;
Espero a alguien le sea útil,
salu2!
Con esta clase acabo de descubrir que me quiero dedicar a base de datos ❤
una duda a la hora de nombrar el count(*) no seria mejor usar el AS para que se lea mejor nuestro codigo?
Tener en cuenta que en el Group by generalmente van las columnas que no tienen una función de agregación
para el group by siempre debe ir una función?
-- Agrupación por year - month
SELECT year(fecha_publicacion) as post_year,monthname(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY post_year, post_month;
SELECT Categorias.Nombre_Categoria, COUNT(Productos.ID_Producto) as Cantidad_Productos
FROM Categorias
LEFT JOIN Productos ON Categorias.ID_Categoria = Productos.ID_Categoria
GROUP BY Categorias.Nombre_Categoria;
--
SELECT Categorias.Nombre_Categoria, AVG(Productos.Precio) as Precio_Promedio
FROM Categorias
LEFT JOIN Productos ON Categorias.ID_Categoria = Productos.ID_Categoria
GROUP BY Categorias.Nombre_Categoria;
--
SELECT Clientes.Nombre, COUNT(Pedidos.Numero_Pedido) as Total_Compras
FROM Clientes
LEFT JOIN Pedidos ON Clientes.ID_Cliente = Pedidos.ID_Cliente
GROUP BY Clientes.Nombre
ORDER BY Total_Compras DESC
LIMIT 1;
Esta consulta mostrará el cliente que ha realizado más compras y la cantidad total de compras que ha realizado.
Puedes adaptar estas consultas a tus necesidades específicas o utilizarlas como punto de partida para explorar más a fondo tu base de datos.
ESTE CURSO NECESITA UNA ACTUALIZACION URGENTE!
ESTE CURSO NECESITA UNA ACTUALIZACION URGENTE!
Excelente el profesor enseñando en un mes aprendi mas que en 3 años de instituto.
Saludos desde Argentina
¡Por favor, que este maestro enseñe los cursos de Power BI !
En el caso de ejemplo que coloca el profe, para sumar los gastos de una cuenta bancaria de acuerdo al tipo de gasto, cree una tabla de prueba para aplicar este ejemplo.
La tabla tiene las columnas id, tipo_gasto, monto_gasto,
Para agregar contenido a la tabla use este codigo:
insert into gastos (id, tipo_gasto, monto_gasto)
values
(1,‘comida’, ‘250’),
(2,‘arriendo’, ‘500’),
(3,‘transporte’,‘100’),
(4,‘ahorro’, ‘1000’),
(5,‘comida’, ‘45’),
(6,‘transporte’, ‘80’),
(7,‘ahorro’, ‘65’),
(8,‘comida’,‘200’),
(9,‘transporte’,‘5’),
(10,‘arriendo’,‘750’);
Luego, agrego este query:
select tipo_gasto, sum(monto_gasto)
from gastos
group by tipo_gasto;
Y esta es la tabla con los resultados:
tipo_gasto monto_gasto
ahorro 1065
arriendo 1250
comida 495
transporte 185
Espero les sirva para practicar.
Saludos compañeros.
Tuplas = Filas
Una forma para entenderlo, si es que lo entendí bien, es:
GROUP BY funciona tomando una columna, por ejemplo de posts toma usuario_id, y con una de las funciones que tiene la base de datos nos permite mirar diferentes datos, por ejemplo el conteo con COUNT(*).
Pero para obtener estos datos primero GROUP BY debe mirar que valores hay en esa columna seleccionada, en usuario_id pues ids, y va a agrupar cada dato de la columna, un id, y la función que hemos definido, contar cuantos posts ha hecho el usuario identificado por el id, haciendo una fila nueva por cada grupo o dato en la columna.
El query quedaría de la siguiente forma:
SELECT usuario_id, COUNT(*) FROM posts
GROUP BY usuario_id;
Medida del valor total de todos los jugadores en el mundial. (Mi base de Datos equivale a los titulares y 7 suplentes)
Agrupe el valor de cada jugador por la liga donde juega.
Faltan al final Colombia y Polonia con un valor de 1 cada liga.
SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY post_month;
SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
FROM posts
GROUP BY post_cuantity;
Aprender esto cambio mi vida. Hay una columna que normalmente en excel me toca alimentar con una tabla dinámica con una sumatoria y de ahí es que hago el BUSCARV. Esto es como lo mismo pero para hacerlo automático en código. Me acaban de ahorrar un monton de pasos.
Excelente profesor!
Si están usando postgreSQL recomiendo el tutorial de la página oficial:
Estoy sorprendido por todo lo que he aprendido en 38 clases. La propiedad GROUP BY aparte de agrupar los datos de los campos permite mejorar la comprensión de los mismo, generando le mas valor a la información disponible en la base de datos.
Hola a todos,
Este es el query que acabo de realizar viendo lo aprendido, contas de seleccionar cuantos post se realizaron en cada año ademas cuantos fueron hechos en cada mes y en que estatus se encuentran dichos posts.
Cualquier feedback bienvenido sea 😄
SELECT empresas. nombre AS empresa, SUM(abono) AS total
FROM cuotas
INNER JOIN empresas ON empresas. id = cuotas. empresa_ id
GROUP BY empresa;
Mi ejemplo esta vez es el precio total de recompensa de los Mugiwara de One Piece.
.
Precios de los Mugiwara
.
Recompensa total de los Mugiwara
Si es que no entediste y necesitas ayuda grafica te dejo una imagen que te ayudaa entender
Ya se le ve el queso a la tostada cuando dice en clases anteriores que los querys bien ejecutados son muy útiles para elaborar informes.
Aquí una consulta en base a los post existentes en cada categoría.
*Para este caso he utilizado el GROUP BY y el INNER JOIN para post y categorias.
-- CUANTOS POST EXISTEN EN CADA CATEGORIA
SELECT categoria_nombre, COUNT(*) post_count_categoria
FROM posts tblp
INNER JOIN categorias tblc
ON tblp.categoria_id=tblc.categoria_id
GROUP BY categoria_nombre;
-- Agrupar los count por los status
SELECT estatus, COUNT(*) AS post_number
FROM posts
GROUP BY estatus;
-- Agrupar cuantos post se hicieron por cada año
SELECT YEAR(fecha_publicacion) AS post_year, COUNT(*) AS post_number
FROM posts
GROUP BY post_year;
-- Agrupar cuantos posts se hicieorn por cada mes
SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_number
FROM posts
GROUP BY post_month;
-- Agrupar cuantos post se hicieorn por cada mes y agruparlos por estatus
SELECT estatus, MONTHNAME(fecha_publicacion) AS post_date, COUNT(*) AS post_number
FROM posts
GROUP BY estatus, post_date;
Consulta ordenado por orden ascendente:
SELECT YEAR(fecha_publicacion) AS post_year, COUNT(*) AS post_quantity
FROM posts GROUP BY post_year ORDER BY post_year ASC;
Con esta sentencia podemos obtener el ID de usuario, el Nickname y la cantidad de posts que ha hecho cada uno.
SELECT usuarios.id AS ID_Usuario, usuarios.nickname AS Nombre, COUNT(posts.usuario_id) AS N_Posts
FROM usuarios
LEFT JOIN posts
ON usuarios.id = posts.usuario_id
GROUP BY posts.usuario_id;
Les dejo un query que armé para agrupar registros pro año y por mes. espero les sea de utilidad.
SELECT EXTRACT(YEAR FROM oficios.fechaDeRecepcion), EXTRACT(MONTH FROM oficios.fechaDeRecepcion), COUNT(*)
FROM muestras LEFT JOIN oficios ON muestras.oficio_id = oficios.id
WHERE oficios.estado_id = 2
AND oficios.fechaDeRecepcion >= '2017-01-01'
GROUP BY EXTRACT(YEAR FROM oficios.fechaDeRecepcion), EXTRACT(MONTH FROM oficios.fechaDeRecepcion)
Yo la ocupé para tomar la edad promedio de cada liga de futbol del mundo, este fue el resultado (También hice uso de la vista que había creado anteriormente).
les comparto una consulta que hice con dos tablas usando join y Group by
select login as nombre,count(titulo) as total_post
from usuarios
inner join post on usuarios . id = post.usuario_id
group by login;
en este caso queria saber cuantos posts tenia cada persona
cabe destacar que los operadores usados después de FROM por lo general deben estar ubicados en el orden que se utilizó en la selección, por ejemplo
SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity, estatus
FROM posts
GROUP BY post_month, estatus;
es decir, que si escribo _post_mont _ primero, en el GROUP BY debo señalar primero post_mont. mi aporte no es cien por ciento seguro, pero en algunos casos me ha lanzado error por ese detalle y es mejor tenerlo todo ordenado para hacer más factible la selección
Si tratas de hacer algo como
SELECT * FROM usuarios GROUP BY categoría;
Te va a salir todo sin repetición alguna, ósea que no te pueden salir todos los usuarios si la categoría se repite, por eso se usa el ORDER BY
He aprendido bastante para mi nuevo reto profesional! Muchas gracias
Me encanta como lo hace ver tan fácil, solo es entrenar.
GROUP BY tiene que ver con agrupación. Indica a la base de datos qué criterios debe tener en cuenta para agrupar.
Group by es una sentencia muy util pero hay que saberla utilizar.
Excelente video 😃
excelente curso
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?