Bienvenida conceptos básicos y contexto histórico de las Bases de Datos

1

Bienvenida conceptos básicos y contexto histórico de las Bases de Datos

2

Playground: tu primera consulta en bases de datos

Introducción a las bases de datos relacionales

3

Historia de las bases de datos relacionales

4

Qué son entidades y atributos

5

Entidades de Platzi Blog

6

Relaciones

7

Múltiples muchos

8

Diagrama ER

9

Diagrama Físico: tipos de datos y constraints

10

Diagrama Físico: normalización

11

Formas normales en Bases de Datos relacionales

12

Diagrama Físico: normalizando Platziblog

RDBMS (MySQL) o cómo hacer lo anterior de manera práctica

13

¿Qué es RDB y RDBMS?

14

Instalación local de un RDBMS (Windows)

15

Instalación local de un RDBMS (Mac)

16

Instalación local de un RDBMS (Ubuntu)

17

Clientes gráficos

18

Servicios administrados

SQL hasta en la sopa

19

Historia de SQL

20

DDL create

21

Playground: CREATE TABLE

22

CREATE VIEW y DDL ALTER

23

DDL drop

24

Playground: VIEW, ALTER y DROP en SQL

25

DML

26

Playground: CRUD con SQL

27

¿Qué tan standard es SQL?

28

Creando Platziblog: tablas independientes

29

Creando Platziblog: tablas dependientes

30

Creando Platziblog: tablas transitivas

Consultas a una base de datos

31

¿Por qué las consultas son tan importantes?

32

Estructura básica de un Query

33

SELECT

34

Playground: SELECT en SQL

35

FROM y SQL JOINs

36

Utilizando la sentencia FROM

37

Playground: FROM y LEFT JOIN en SQL

38

WHERE

39

Utilizando la sentencia WHERE nulo y no nulo

40

Playground: Filtrando Datos con WHERE

41

GROUP BY

42

ORDER BY y HAVING

43

Playground: Agrupamiento y Ordenamiento de Datos

44

El interminable agujero de conejo (Nested queries)

45

¿Cómo convertir una pregunta en un query SQL?

46

Preguntándole a la base de datos

47

Consultando PlatziBlog

48

Playground: Prueba Final con PlatziBlog

Introducción a la bases de datos NO relacionales

49

¿Qué son y cuáles son los tipos de bases de datos no relacionales?

50

Servicios administrados y jerarquía de datos

Manejo de modelos de datos en bases de datos no relacionales

51

Top level collection con Firebase

52

Creando y borrando documentos en Firestore

53

Colecciones vs subcolecciones

54

Recreando Platziblog

55

Construyendo Platziblog en Firestore

56

Proyecto final: transformando tu proyecto en una db no relacional

Bases de datos en la vida real

57

Bases de datos en la vida real

58

Big Data

59

Data warehouse

60

Data mining

61

ETL

62

Business intelligence

63

Machine Learning

64

Data Science

65

¿Por qué aprender bases de datos hoy?

Bonus

66

Bases de datos relacionales vs no relacionales

67

Elegir una base de datos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

GROUP BY

41/67
Recursos

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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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:

  • Una regla importante: “Siempre que se utilice una función de grupo (la cual devuelve una sola fila) en la sentencia “SELECT” junto con proyecciones de columnas de tabla (que pueden devolver varias filas), deben incluirse las columnas dentro de la cláusula GROUP BY.” De lo contrario recibiremos un error.

Ejemplo del error:

  • SELECT department_name, job_id, AVG(salary)
    FROM employees
    GROUP BY department_name;

Forma correcta:

  • SELECT department_name, job_id, AVG(salary)
    FROM employees
    GROUP BY department_name, job_id;

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

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;
La sentencia a GROUP BY sirve para agrupar datos, según un determinado criterio, y aplicar operaciones sobre los elementos del conjunto creado.

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;

GROUP BY

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

Group BY, es una herramienta super poderosa, recordemos que despues de agrupar, el where no sirve, en vez de where, debes usar HAVING que es la manera de filtrar grupos, y where filtra tablas

¡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.

Para agrupar siempre se debe utilizar un campo categorico.

SELECT MONTHNAME(fecha_publicacion) AS post_month, COUNT(*) AS post_quantity
 FROM posts
 GROUP BY post_month;

Si utlizas un campo numerico te dara error.

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:

https://www.postgresqltutorial.com/

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