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

Introducción a las bases de datos relacionales

2

Historia de las bases de datos relacionales

3

Entidades y atributos

4

Entidades de Platzi Blog

5

Relaciones

6

M√ļltiples muchos

7

Diagrama ER

8

Diagrama Físico: tipos de datos y constraints

9

Diagrama Físico: normalización

10

Formas normales en Bases de Datos relacionales

11

Diagrama Físico: normalizando Platziblog

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

12

¬ŅQu√© es RDB y RDBMS?

13

Instalación local de un RDBMS (Windows)

14

Instalación local de un RDBMS (Mac)

15

Instalación local de un RDBMS (Ubuntu)

16

Clientes gr√°ficos

17

Servicios administrados

SQL hasta en la sopa

18

Historia de SQL

19

DDL create

20

CREATE VIEW y DDL ALTER

21

DDL drop

22

DML

23

¬ŅQu√© tan standard es SQL?

24

Creando Platziblog: tablas independientes

25

Creando Platziblog: tablas dependientes

26

Creando Platziblog: tablas transitivas

Consultas a una base de datos

27

¬ŅPor qu√© las consultas son tan importantes?

28

Estructura b√°sica de un Query

29

SELECT

30

FROM

31

Utilizando la sentencia FROM

32

WHERE

33

Utilizando la sentencia WHERE nulo y no nulo

34

GROUP BY

35

ORDER BY y HAVING

36

El interminable agujero de conejo (Nested queries)

37

¬ŅC√≥mo convertir una pregunta en un query SQL?

38

Pregunt√°ndole a la base de datos

39

Consultando PlatziBlog

Introducción a la bases de datos NO relacionales

40

¬ŅQu√© son y cu√°les son los tipos de bases de datos no relacionales?

41

Servicios administrados y jerarquía de datos

Manejo de modelos de datos en bases de datos no relacionales

42

Top level collection con Firebase

43

Creando y borrando documentos en Firestore

44

Colecciones vs subcolecciones

45

Recreando Platziblog

46

Construyendo Platziblog en Firestore

47

Proyecto final: transformando tu proyecto en una db no relacional

Bases de datos en la vida real

48

Bases de datos en la vida real

49

Big Data

50

Data warehouse

51

Data mining

52

ETL

53

Business intelligence

54

Machine Learning

55

Data Science

56

¬ŅPor qu√© aprender bases de datos hoy?

Bonus

57

Bases de datos relacionales vs no relacionales

58

Elegir una base de datos

No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Curso de Fundamentos de Bases de Datos

Curso de Fundamentos de Bases de Datos

Israel V√°zquez Morales

Israel V√°zquez Morales

GROUP BY

34/58
Recursos

GROUP BY tiene que ver con agrupación. Indica a la base de datos qué criterios debe tener en cuenta para agrupar.

Aportes 196

Preguntas 40

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

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 ūüėĄ

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.

Resumen escrito.

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;

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

Note que en el primer ejemplo no puso as para nombrar post_quality y funciono.

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(*)).

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‚ÄĚ

este es uno de los que m√°s me gusta, me acuerda mucho a las tablas din√°micas de excel

¬ŅCual es la diferencia entre COUNT(*) y COUNT(1)?

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.

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;

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

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;

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.

order by importante para el ordenamiento de los registros

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.

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);

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.

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

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.

[email protected] 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;

puede pasar algo catastrofico si tengo instalado sql y despues quiero instalar XAMPP?

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 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 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;

La sentencia a GROUP BY sirve para agrupar datos, seg√ļn un determinado criterio, y aplicar operaciones sobre los elementos del conjunto creado.

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

Lista de Funciones de tiempo y fecha en MySQL entre otros, es la documentación de MySQL

para el group by siempre debe ir una función?

En este sitio hay una buena explicación de funciones básicas complementarias a las que hemos visto

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

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.

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;

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;

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.

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.

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.

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;

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)

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

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)

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.

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

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;

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

Mi consulta
Los usuarios que existen y cuantos posts han escrito cada uno.

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

Para contar datos que tengan varios registros en la base pero solo quieres ver dichos registros sin repetidos se puede DISTINCT

SELECT column_name COUNT(DISTINCT *) without_replays
FROM table_name;

Algo super interesante que acabo de probar (Al menos para mi jeje) es que al momento de combinarlo con un LEFT JOIN, podemos saber cuantos post hay por categorías con

SELECT nombre_categoria, count(*) AS post_quantity FROM posts
LEFT JOIN categorias ON categorias.id=posts.categoria_id
GROUP BY categoria_id;

Pruebenlo c:

Mi consulta :3

SELECT titulo, monthname(fecha_publicacion),`status`, COUNT(*)  AS total_fecha_publicadas FROM posts
WHERE fecha_publicacion AND `status` <> 'activo' GROUP BY `status`,fecha_publicacion ;

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;

Como se pueden dar cuenta el atributo que va en el group by siempre debe ir en el select y por lo regular siempre utilizamos un función como count , avg , sum , etc.

Pude notar que no uso AS para COUNT, y pues al parecer si se puede hacer eso, siempre y cuando uses como nombre dos palabras separadas por guion bajo (_), en este caso uso:
COUNT(*) post_quantity.

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

GROUP BY, permite agrupar diferentes datos de la DB, lo cual puedo hacerlo mediante diferentes criterios seg√ļn la informaci√≥n de salida requerida.
Así mismo, se puede agrupar por uno o más criterios.

De los mejores profes que he tenido, muy claro y entendible todo ūüĎŹ

No se les hace que es uno de los mejores profes de platzi?

Esto son tablas dinámicas pero escribiendo código

Excelente clase!

Excelente Profesor !!

excelente manera de explicar todo. El profesor es muy buen expositor. De los mejores profesores que he visto en platzi.

No sabía que existia una función MOTHNAME(), interesante lo que uno aprende en el camino.

Por los momentos es el mejor profesor de Bases de Datos que he tenido, explica excelente y se puede sentir que le gusta dar clases. Razones por las que he aprendido mas en Platzi que en la universidad.

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;

GROUP BY tiene que ver con agrupación y es la que indica a la base de datos que criterios debe tener en cuenta para agrupar.

En la universidad vi conceptos de base de datos y no era tan compresible, me gusta esta manera de explicar, buenas estas clases del profe Israel

Vaya!, este curso me ha aclarado muchas cosas de bases de datos que yo no conocía. Lo poco que se lo aprendí de forma empírica