Traductor de preguntas de negocio a SQL
Clase 19 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
Clase 19 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
Enrique Alexis Lopez Araujo
Johan Marcel Fernandez Castillo
Luis Andrés Arce Cárdenas
Emerson Y
Fredy Mendoza Vargas
Daniel Andrés Giraldo Benites
Alejandro Cruz Martínez
Manuel Rivera
Daniel Andrés Giraldo Benites
Claudia Johana Herrera Torres
Adrián Rodríguez Blanco
Nelson Ricardo Ramírez García
Eduardo Kiriakos Piazza
Juan Exson Guevara Mayta
Facundo Nicolás García Martoni
EDGAR MERCADO GARCIA
Victor Noguera
Daniel Andrés Giraldo Benites
Facundo Nicolás García Martoni
Axel Alvarado
Diego Edgardo Vega Herrera
Nicolas Rocha
Fredy Mendoza Vargas
Nestor Alonso Zaque Chala
Nelson Acosta
Cristian Orozco Benjumea
Daniel Benites Izquierdo
Braian Peña
Abril Darynka Tapia Sosa
Martín Leyva
Facundo Nicolás García Martoni
Usuario anónimo
Nahun Fernando Oseguera Villalobos
Edgar Andrés Montenegro Martínez
José Indalicio Carvajal Hernández
David Elias Pedroza Chamorro
David Elias Pedroza Chamorro
Daniel Andrés Giraldo Benites
Abril Darynka Tapia Sosa
Moisés Cedeño
Andrés Vega
Siempre que trabajen con funciones como son Sum(), Count(), Avg(), Max(), Min(), deben agregar la funcion group cuando en el select incluyan otra columna que desean mostrar aparte de la funcion de agrupamiento otra columna
Es cierto, porque sola te mostrara el primer dato con el resultado de la funcion.
En Sql Server inclusive te marca error
Resumen de la clase:
-- 1. ¿Qué nacionalidades hay? -- Mediante la clausula DISTINCT trae solo los elementos distintos SELECT DISTINCT nationality FROM authors ORDER BY 1; -- 2. ¿Cuántos escritores hay de cada nacionalidad? -- IS NOT NULL para traer solo los valores diferentes de nulo -- NOT IN para traer valores que no sean los declarados (RUS y AUT) SELECT nationality, COUNT(author_id) AS c_authors FROM authors WHERE nationality IS NOT NULL AND nationality NOT IN ('RUS','AUT') GROUP BY nationality ORDER BY c_authors DESC, nationality ASC;
Muchas Gracias
excelente resumen muchas gracias
Este curso complementa perfectamente el de Fundamentos de bases de datos.
Completamente de acuerdo contigo bro, el uno para el otro.
100% de acuerdo, vengo del curso de fundamentos y co este curso me siento mas seguro en el manejo de bases de datos
Hola: Aqui les comparto mis respuestas
---¿Qué nacionalidades hay? SELECT nationality FROM authors GROUP BY nationality; ---¿Cuantos escritores hay de cada nacionalidad? SELECT nationality, COUNT(author_id) as qty_authors FROM authors GROUP BY nationality; ---¿Cuantos libros hay de cada nacionalidad? SELECT a.nationality, COUNT(b.book_id) as qty_book FROM books as b JOIN authors as a ON b.author_id = a.author_id GROUP BY a.nationality; ---¿Cual es el promedio/desviacion standard del precio de los libros? SELECT AVG(price) as avg_price, STDDEV(price) as stddev_price FROM books; ---¿Cual es el precio maximo/minimo de un libro? SELECT MAX(price) as max_price, MIN(price) as min_price FROM books; ---¿Cual es el precio maximo/minimo de un libro? SELECT c.name, t.type, b.title, a.name, a.nationality FROM transactions as t LEFT JOIN clients as c ON c.client_id = t.client_id LEFT JOIN books as b ON b.book_id = t.book_id LEFT JOIN authors as a ON b.author_id = a.author_id;
Tus aportes me están ayudando muchísimo a lo largo del curso. Muchas gracias por compartir tu conocimiento. Saludos.
Gracias por tu aporte 👍
Lo único que aclararía es que la última línea de código no es para saber el precio máximo y mínimo de un libro sino las transacciones que se han hecho.
El orden de las condiciones es importante. Primero deberíamos descartar basándonos en valores NULL y en números enteros que son los más rápidos de procesar y luego condicionar por cadenas de caracteres porque lo va a hacer sobre una cama más pequeña.
Después se tomaría en cuenta las condiciones mas posibles a las mas puntuales, como menciona el profesor?
@juanexgue exactamente 👌🏼
Hola, tambien hice una prueba con la linea de comandos; en la cual puse las 3 consultas en una archivo llamado prueba.sql y luego se lo envie a la mysql y el resultado le indique que me devuelva en un archivo llamado resultado.txt, aqui esta la linea de comando que realice: mysql -u root -p -D cursoplatzi <"g:\prueba.sql" >g:\resultado.txt
Trabajo con una terminal en windows.
Excelente idea, gracias.
muchas gracias por el aporte es una buena idea
Me puse el reto de responder a las 7 preguntas antes de ver la clase, esto es lo que salió 💪🏼
-- ¿Qué nacionalidades hay? SELECT nationality FROM authors WHERE nationality IS NOT NULL GROUP BY nationality ORDER BY nationality; -- ¿Cuantos escritores hay de cada nacionalidad? SELECT nationality, COUNT(*) AS quantity_of_authors FROM authors GROUP BY nationality ORDER BY nationality; -- ¿Cuantos libros hay de cada nacionalidad? SELECT nationality, COUNT(*) AS quantity_of_books FROM books AS b LEFT JOIN authors AS a ON b.author_id = a.author_id GROUP BY nationality; -- ¿Cuál es el promedio/desviación estándar del precio de libros? SELECT AVG(price) as `standard_deviation` FROM books; -- ¿Cuál es el promedio/desviación estándar de la cantidad de autores por nacionalidad? SELECT AVG(quantity_of_authors) as standard_deviation_by_nationality FROM (SELECT COUNT(*) AS quantity_of_authors FROM authors GROUP BY nationality) AS quantity_of_authors_by_nationality; -- ¿Cuál es el precio máximo y mínimo de un libro? SELECT price as max_price FROM books ORDER BY price DESC LIMIT 1; SELECT price as min_price FROM books WHERE price IS NOT NULL ORDER BY price ASC LIMIT 1; -- ¿Cómo quedaría el reporte de préstamos? SELECT c.name, b.title, (CASE WHEN finished = 1 THEN 'returned' WHEN finished = 0 THEN 'owed' END) AS `state` FROM transactions AS t INNER JOIN books AS b ON t.book_id = b.book_id INNER JOIN clients AS c ON t.client_id = c.client_id WHERE (`type` = 'lend' and finished = 0) or `type` = 'return' ORDER BY `name`;
The GROUP BY statement is often used with aggregate functions (COUNT(), MAX(), MIN(), SUM(), AVG()) to group the result-set by one or more columns
Para no mostrar resultado NULL en la primera pregunta pueden agregar:
WHERE nationality IS NOT NULL;
Resultado:
SELECT DISTINCT nationality FROM authors WHERE nationality IS NOT NULL; :)
Resumen de la Clase: Palabra Reservada:
Complementos al filtrar y queremos excluir:
Tip:
**Código: **
-- Clase 17 5 Casos de Negocio -- Preguntas a Queries -- Que nacionalidades hay? SELECT DISTINCT nationality FROM authors ORDER BY nationality; -- Cuantos escritores hay de cada nacionalidad? SELECT nationality, COUNT(author_id) AS c_authors FROM authors WHERE nationality IS NOT NULL AND nationality <> 'RUS' GROUP BY nationality ORDER BY c_authors DESC, nationality ASC; SELECT nationality, COUNT(author_id) AS c_authors FROM authors WHERE nationality IS NOT NULL AND nationality NOT IN('RUS', 'AUT') GROUP BY nationality ORDER BY c_authors DESC, nationality ASC; -- Cuantos libros hay de cada nacionalidad? Como reto SELECT a.nationality, COUNT(b.book_id) AS c_books FROM authors AS a LEFT JOIN books AS b on a.author_id = b.author_id WHERE nationality IS NOT NULL GROUP BY nationality ORDER BY c_books DESC;```
Muchas gracias x el aporte
Para el primer caso también me funciono: mysql> select nationality -> from authors -> group by nationality;
Filtrar información es algo de lo más útil que puede existir cuando trabajamos en reportería y análisis, por ejemplo:
asumimos que trabajamos en un reporte de una empresa de CALL CENTER (HFC) específicamente para el área de soporte técnico, cuando traemos todos los registros de la base de datos, dentro de los registros se encuentran todas las llamadas que han entrado, también llamadas salientes, en este caso específico trabajamos generando reportes en los cuales debemos excluir llamadas entrantes referentes a problemas comerciales, solo debemos incluir llamadas de soporte tecnico y reparacion, debemos por ejemplo cada hora poder contar cantidad de llamadas entrantes y poder separarlas en TV, TELEFONIA, INTERNET realizar sus respectivos conteos asi como tambien realizar los conteos sobre cuantas de estas llamadas han sido solucionadas y cuántas han sido enviadas a terreno (técnicos a terreno) debemos poder también realizar otro tipo de operaciones como suma, resta y promedios para representar niveles de atención al cliente, promedios de resolutividad, todo esto se genera en un dashboard y es presentado a la gerencia cada hora.
Esto sería un caso de uso real.
Gracias por el ejemplo, en el último paso que dice:
El Dashboard se haría con una herramienta como PowerBI o que otra se usa?
Que simple y fácil lo hace el profe, jamas entendi esto en las aulas
Muy buenos casos practicos, los hice solo.
Querys de las Preguntas antes de la respuesta del profesor
Biblioteca:
Biblioteca: en inglés Library
Librería
Librería en inglés Bookstore
Fuente: RAE
Hola Martín! ¿A que viene esta aclaración?
A mostrarse jeje
1)QUE NACIONALIDADES HAY
SELECT DISTINCT nationality FROM authors ORDER BY nationality;
2) ¿Cuantos escritores hay de cada nacionalidad?
--ORDENAR POR CANTIDAD Y DE FORMA ALFABÉTICA SELECT nationality, COUNT(author_id) as Count FROM authors GROUP BY nationality ORDER BY count DESC, nationality ASC;
La instrucción GROUP BY solo permite visualizar dos columnas? Ej:
SELECT <col1>,<col2> FROM tabla GROUP BY ....
Intentando visualizar mas de 1 columna me sale error.
puedes visualizar tantas columnas como quieras, pon el código completo para ayudarte.
Alguien sabe como hacer para mostrar solo aquellos países que tengan mas de 10 autores?
Tengo la respuesta:
SELECT a.nationality, COUNT(b.book_id) AS num FROM books AS b LEFT JOIN authors AS a ON a.author_id = b.author_id GROUP BY a.nationality HAVING num >10 ORDER BY num DESC, a.nationality ASC;
ordénalos con ORDER BY y luego solo añade LIMIT 10
Alguien tiene los registros de transactions?
Acá tienes algunos:
INSERT INTO `transactions`(client_id, book_id, `type`, finished) VALUES (34, 12, 'sell', 1), (87, 54, 'lend', 0), (14, 3, 'sell', 1), (54, 1, 'sell', 1), (81, 12, 'lend', 1), (81, 12, 'return', 1), (29, 87, 'sell', 1);
A la primera consulta la agregaría en la funcion COUNT para tener el dato exacto.
SELECT COUNT(DISTINCT nationality) FROM authors;