Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de SQL y MySQL

Curso de SQL y MySQL

Alberto Alcocer

Alberto Alcocer

Continuación de casos de negocio

20/24
Recursos

Aportes 106

Preguntas 20

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Para el que no tenga precios agregados:
Aqui un ejemplo de como podemos generar precios aleatorios para todos los libros:

UPDATE books
SET price = FLOOR(RAND()*(35-10+1))+10
WHERE book_id between 1 and 198

<UPDATE books 
  SET price = FLOOR(RAND()*(35-10+1))+10
  WHERE book_id between 1 and 198 >

Esta pagina me ayudo a implementar la formula
https://www.techonthenet.com/sql_server/functions/rand.php

Dato de color:
1- El calendario gregoriano comenzó a usarse en el año 1582 D.C., impulsado por el papa Gregorio XIII.
2- El que se utilizaba antes de eso era el calendario Juliano, desde el año 45 A.C.
3- El año 0 no existe, del 1 A.C. pasa directamente al 1 D.C., tomandose el 0 como un instante de tiempo y no como un período.
4- Los días del 5 al 14 de octubre de 1582 jamás existieron, es el tiempo que se suprimió para corregir el desfase entre lo calendarios Juliano y Gregoriano.

Muy, pero muy mal la organización de los materiales de apoyo para este curso. Pierdes tiempo en buscar los archivos correctos, con la data correcta.
Poner mas atención a esto por favor

Resumen de la clase.

-- 4. ¿Cuál es el promedio/desviación standard del precio de libros?
SELECT a.nationality,  
  AVG(b.price) AS promedio, 
  STDDEV(b.price) AS std 
FROM books AS b
JOIN authors AS a
  ON a.author_id = b.author_id
GROUP BY a.nationality
ORDER BY promedio DESC;

-- 5. ¿Cuál es el promedio/desviación standard del precio de libros por nacionalidad?
-- Agrupar por la columna pivot
SELECT a.nationality,
  COUNT(b.book_id) AS libros,  
  AVG(b.price) AS promedio, 
  STDDEV(b.price) AS std 
FROM books AS b
JOIN authors AS a
  ON a.author_id = b.author_id
GROUP BY a.nationality
ORDER BY libros DESC;

-- 6. ¿Cuál es el precio máximo/mínimo de un libro?
SELECT nationality, MAX(price), MIN(price)
FROM books AS b
JOIN authors AS a
  ON a.author_id = b.author_id
GROUP BY nationality;

-- 7. ¿cómo quedaría el reporte de préstamos?
-- CONCAT: para concatenar en cadenas de texto.
-- TO_DAYS: recibe un timestamp ó un datetime
SELECT c.name, t.type, b.title, 
  CONCAT(a.name, " (", a.nationality, ")") AS autor,
  TO_DAYS(NOW()) - TO_DAYS(t.created_at)
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;

SELECT TO_DAYS(NOW()) trae los días desde el día 0 del año cero hasta hoy.
SELECT TO_DAYS('0000-01-01'); el día uno

Sería bueno que pusieran el archivo con los datos actualizados, ya que el que está para descargar tiene casi todos los precios en NULL.

<h3>Top 10 Escritores con mas libros en la tienda.</h3>

Los datos que fueron ofrecidos son diferentes a los usados, ya tuve problemas con la tabla de transactions y sus datos (Ya lo solucioné) y ahora me doy cuenta de que el precio de todos los libros a partir del 12 están en null 😦

Me gustaría que el profesor utilizará los mismos datos que se encuentra en la pestaña de “Archivos y Enlaces” para que nos dieran los mismos resultados… De todas maneras, muy buena clase, he aprendido.

El contenido del archivo de All.sql no coincide con lo que muestra el profesor en pantalla. Solo 12 libros me aparecen con precio, de resto todos en NULL 😕

Cuando veo que sacan desviación estándar y promedios ya veo que si es necesario el curso de estadística para programadores de platzi.

Basicamente esto se trata de hacer preguntas y convertir los datos almacenados en informacion valiosa para los usuarios

RESUMEN:


  1. ¿Cual es el promedio/desviación estandar del precio de libros?

SELECT nationality, COUNT(book_id) as libros, AVG(price) as prom, STDDEV(price) as std FROM books AS b JOIN authors as a ON a.author_id= b.author_id GROUP BY nationality ORDER BY libros ;
5. ¿Cual es el precio máximo/mínimo de un libro?

SELECT nationality, MAX(price), MIN(price) FROM books AS b JOIN authors as a On a.author_id= b.author_id GROUP BY nationality ;

  1. REPORTE FINAL

SELECT c.name, t.type, b.title, CONCAT (a.name, " (", a.nationality, ")") as autor, TO_DAYS (NOW()) - TO_DAYS (t.created_at) 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 ;

Las funciones built-in de MySql aligeran el trabajo de un backend, ya teniendo datos procesados el backend puede visualizarlas en un frontend.

Solo me aparecen con precio los primeros libros ya todos los demas me muestra con null 😕

guau, si sabes cuando fue la ultima que un cliente te hizó compra seria más fácil hacerle seguimiento o si sabes cada cuanto compra llamarlo el dia que suele comprar, guauuuuuuuuuuuu

Se pueden hacer cosas geniales con información ordenada

script pregunta 4

Tabla TRANSACTIONS con valores

<CREATE TABLE `transactions` (
  `transaction_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `book_id` int(10) unsigned NOT NULL,
  `client_id` int(10) unsigned NOT NULL,
  `type` enum('lend','sell', 'return') NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `finished` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO transactions(book_id, client_id, `type`, finished)
VALUES(12, 34, 'sell',1),
(54, 87, 'lend',0),
(3, 14, 'sell',1),
(1, 54, 'sell',1),
(12, 81, 'lend',1),
(12, 81, 'return',1),
(87, 29, 'sell',1);>

Para quellos que no tengan los precios faltantes del la tabla en books, les recomiendo lo siguiente.

  1. Desde Terminar importar la data.sql con:
$ mysql -u root -p -D "nombre de la BD" < "nombre del script"
  1. El script debe de contener esta información:
TRUNCATE TABLE `books`;

INSERT INTO `books` VALUES (1,1,'The Startup Playbook',2013,'en',NULL,10.00,1,5,'Advice from the experts'),
(2,1,'The Startup Playbook',2014,'es',NULL,10.00,1,5,'Consejo de los expertos, traducido por Platzi'),
(3,3,'Estudio en escarlata',1887,'es',NULL,5.00,1,10,'La primera novela de Sherlock Holmes'),
(4,6,'Wallander: Asesinos sin rostro',1991,'es',NULL,15.00,1,3,''),
(5,6,'Wallander: Los perros de Riga',1992,'es',NULL,15.00,1,3,''),
(6,6,'Wallander: La leona blanca',1993,'es',NULL,15.00,1,3,''),
(7,6,'Wallander: El hombre sonriente',1994,'es',NULL,15.00,1,3,''),
(8,6,'Wallander: La falsa pista',1995,'es',NULL,15.00,1,3,''),
(9,6,'Wallander: La quinta mujer',1996,'es',NULL,15.00,1,3,''),
(10,6,'Wallander: Pisando los talones',1997,'es',NULL,15.00,1,3,''),
(11,6,'Wallander: Cortafuegos',1998,'es',NULL,15.00,1,3,''),
(12,5,'El llano en llamas',1953,'es',NULL,10.00,0,1,'Cuentos mexicanos'),
(13,7,'Fundamentals of Wavelets',1900,'en',NULL,15.20,1,4,NULL),
(14,8,'Data Smart',1900,'en',NULL,20.5,1,4,NULL),
(15,9,'God Created the Integers',1900,'en',NULL,12.5,1,4,NULL),
(16,10,'Superfreakonomics',1900,'en',NULL,10.5,1,4,NULL),
(17,11,'Orientalism',1900,'en',NULL,21.2,1,4,NULL),
(18,12,'The Nature of Statistical Learning Theory',1900,'en',NULL,15.0,1,4,NULL),
(19,13,'Integration of the Indian States',1900,'en',NULL,13.5,1,4,NULL),
(20,14,'The Drunkard\s Walk',1900,'en',NULL,21.2,1,4,NULL),
(21,15,'Image Processing & Mathematical Morphology',1900,'en',NULL,12.3,1,4,NULL),
(22,16,'How to Think Like Sherlock Holmes',1900,'en',NULL,15.2,1,4,NULL),
(23,17,'Data Scientists at Work',1900,'en',NULL,15.2,1,4,NULL),
(24,18,'Slaughterhouse Five',1900,'en',NULL,15.2,1,4,NULL),
(25,19,'Birth of a Theorem',1900,'en',NULL,10.5,1,4,NULL),
(26,20,'Structure & Interpretation of Computer Programs',1900,'en',NULL,10.5,1,4,NULL),
(27,21,'The Age of Wrath',1900,'en',NULL,10.5,1,4,NULL),
(28,22,'The Trial',1900,'en',NULL,15.5,1,4,NULL),
(29,23,'Statistical Decision Theory',1900,'en',NULL,15.5,1,4,NULL),
(30,24,'Data Mining Handbook',1900,'en',NULL,15.5,1,4,NULL),
(31,25,'The New Machiavelli',1900,'en',NULL,15.5,1,4,NULL),
(32,26,'Physics & Philosophy',1900,'en',NULL,10.2,1,4,NULL),
(33,27,'Making Software',1900,'en',NULL,11.2,1,4,NULL),
(34,28,'Vol I Analysis',1900,'en',NULL,15.3,1,4,NULL),
(35,29,'Machine Learning for Hackers',1900,'en',NULL,10.5,1,4,NULL),
(36,30,'The Signal and the Noise',1900,'en',NULL,12.5,1,4,NULL),
(37,31,'Python for Data Analysis',1900,'en',NULL,10.0,1,4,NULL),
(38,32,'Introduction to Algorithms',1900,'en',NULL,21.5,1,4,NULL),
(39,33,'The Beautiful and the Damned',1900,'en',NULL,20.5,1,4,NULL),
(40,34,'The Outsider',1900,'en',NULL,22.5,1,4,NULL),
(41,3,'The - Vol I Complete Sherlock Holmes',1900,'en',NULL,23.5,1,4,NULL),
(42,3,'The - Vol II Complete Sherlock Holmes',1900,'en',NULL,21.5,1,4,NULL),
(43,37,'The Wealth of Nations',1900,'en',NULL,22.5,1,4,NULL),
(44,38,'The Pillars of the Earth',1900,'en',NULL,24.5,1,4,NULL),
(45,39,'The Tao of Physics',1900,'en',NULL,15.5,1,4,NULL),
(46,40,'Surely You\s re Joking Mr Feynman',1900,'en',NULL,12.3,1,4,NULL),
(47,41,'A Farewell to Arms',1900,'en',NULL,14.6,1,4,NULL),
(48,42,'The Veteran',1900,'en',NULL,10.6,1,4,NULL),
(49,43,'False Impressions',1900,'en',NULL,12.4,1,4,NULL),
(50,44,'The Last Lecture',1900,'en',NULL,13.6,1,4,NULL),
(51,45,'Return of the Primitive',1900,'en',NULL,14.3,1,4,NULL),
(52,46,'Jurassic Park',1900,'en',NULL,13.5,1,4,NULL),
(53,47,'A Russian Journal',1900,'en',NULL,17.5,1,4,NULL),
(54,48,'Tales of Mystery and Imagination',1900,'en',NULL,19.5,1,4,NULL),
(55,10,'Freakonomics',1900,'en',NULL,19.99,1,4,NULL),
(56,39,'The Hidden Connections',1900,'en',NULL,15.98,1,4,NULL),
(57,51,'The Story of Philosophy',1900,'en',NULL,14.89,1,4,NULL),
(58,52,'Asami Asami',1900,'en',NULL,15.6,1,4,NULL),
(59,47,'Journal of a Novel',1900,'en',NULL,14.5,1,4,NULL),
(60,47,'Once There Was a War',1900,'en',NULL,14.6,1,4,NULL),
(61,47,'The Moon is Down',1900,'en',NULL,21.5,1,4,NULL),
(62,56,'The Brethren',1900,'en',NULL,22.6,1,4,NULL),
(63,57,'In a Free State',1900,'en',NULL,22.4,1,4,NULL),
(64,58,'Catch 22',1900,'en',NULL,20.5,1,4,NULL),
(65,59,'The Complete Mastermind',1900,'en',NULL,14.6,1,4,NULL),
(66,60,'Dylan on Dylan',1900,'en',NULL,13.8,1,4,NULL),
(67,61,'Soft Computing & Intelligent Systems',1900,'en',NULL,17.8,1,4,NULL),
(68,62,'Textbook of Economic Theory',1900,'en',NULL,17.4,1,4,NULL),
(69,63,'Econometric Analysis',1900,'en',NULL,18.9,1,4,NULL),
(70,64,'Learning OpenCV',1900,'en',NULL,18.54,1,4,NULL),
(71,65,'Data Structures Using C & C++',1900,'en',NULL,17.6,1,4,NULL),
(72,66,'A Modern Approach Computer Vision',1900,'en',NULL,13.5,1,4,NULL),
(73,67,'Principles of Communication Systems',1900,'en',NULL,15.4,1,4,NULL),
(74,68,'Let Us C',1900,'en',NULL,15.6,1,4,NULL),
(75,69,'The Amulet of Samarkand',1900,'en',NULL,14.6,1,4,NULL),
(76,70,'Crime and Punishment',1900,'en',NULL,17.5,1,4,NULL),
(77,71,'Angels & Demons',1900,'en',NULL,15.3,1,4,NULL),
(78,72,'The Argumentative Indian',1900,'en',NULL,18.9,1,4,NULL),
(79,73,'Sea of Poppies',1900,'en',NULL,24.5,1,4,NULL),
(80,72,'The Idea of Justice',1900,'en',NULL,26.3,1,4,NULL),
(81,75,'A Raisin in the Sun',1900,'en',NULL,27.8,1,4,NULL),
(82,76,'All the President\s Men',1900,'en',NULL,29.5,1,4,NULL),
(83,43,'A Prisoner of Birth',1900,'en',NULL,28.7,1,4,NULL),
(84,78,'Scoop!',1900,'en',NULL,28.9,1,4,NULL),
(85,79,'Ahe Manohar Tari',1900,'en',NULL,24.1,1,4,NULL),
(86,80,'The Last Mughal',1900,'en',NULL,15.3,1,4,NULL),
(87,81,'Vol 39 No. 1 Social Choice & Welfare',1900,'en',NULL,13.6,1,4,NULL),
(88,52,'Radiowaril Bhashane & Shrutika',1900,'en',NULL,18.4,1,4,NULL),
(89,52,'Gun Gayin Awadi',1900,'en',NULL,24.1,1,4,NULL),
(90,52,'Aghal Paghal',1900,'en',NULL,26.68,1,4,NULL),
(91,85,'Maqta-e-Ghalib',1900,'en',NULL,25.3,1,4,NULL),
(92,86,'Manasa',1900,'en',NULL,24.3,1,4,NULL),
(93,87,'India from Midnight to Milennium',1900,'en',NULL,23.6,1,4,NULL),
(94,87,'The Great Indian Novel',1900,'en',NULL,21.0,1,4,NULL),
(95,89,'O Jerusalem!',1900,'en',NULL,20.20,1,4,NULL),
(96,89,'The City of Joy',1900,'en',NULL,20.0,1,4,NULL),
(97,89,'Freedom at Midnight',1900,'en',NULL,19.98,1,4,NULL),
(98,47,'The Winter of Our Discontent',1900,'en',NULL,27.0,1,4,NULL),
(99,93,'On Education',1900,'en',NULL,21.8,1,4,NULL),
(100,94,'Free Will',1900,'en',NULL,11.4,1,4,NULL),
(101,87,'Bookless in Baghdad',1900,'en',NULL,13.6,1,4,NULL),
(102,96,'The Case of the Lame Canary',1900,'en',NULL,15.6,1,4,NULL),
(103,9,'The Theory of Everything',1900,'en',NULL,14.6,1,4,NULL),
(104,98,'New Markets & Other Essays',1900,'en',NULL,13.5,1,4,NULL),
(105,99,'Electric Universe',1900,'en',NULL,18.5,1,4,NULL),
(106,100,'The Hunchback of Notre Dame',1900,'en',NULL,17.7,1,4,NULL),
(107,47,'Burning Bright',1900,'en',NULL,17.7,1,4,NULL),
(108,98,'The Age of Discontuinity',1900,'en',NULL,15.5,1,4,NULL),
(109,103,'Doctor in the Nude',1900,'en',NULL,24.1,1,4,NULL),
(110,104,'Down and Out in Paris & London',1900,'en',NULL,13.3,1,4,NULL),
(111,72,'Identity & Violence',1900,'en',NULL,16.65,1,4,NULL),
(112,80,'Beyond the Three Seas',1900,'en',NULL,15.21,1,4,NULL),
(113,107,'Talking Straight',1900,'en',NULL,17.5,1,4,NULL),
(114,108,'Vol 3 Maugham\s Collected Short Stories',1900,'en',NULL,14.4,1,4,NULL),
(115,42,'The Phantom of Manhattan',1900,'en',NULL,14.23,1,4,NULL),
(116,108,'Ashenden of The British Agent',1900,'en',NULL,13.25,1,4,NULL),
(117,111,'Zen & The Art of Motorcycle Maintenance',1900,'en',NULL,17.8,1,4,NULL),
(118,112,'The Great War for Civilization',1900,'en',NULL,17.8,1,4,NULL),
(119,45,'We the Living',1900,'en',NULL,16.5,1,4,NULL),
(120,114,'The Artist and the Mathematician',1900,'en',NULL,12.21,1,4,NULL),
(121,93,'History of Western Philosophy',1900,'en',NULL,21.12,1,4,NULL),
(122,72,'Rationality & Freedom',1900,'en',NULL,8.6,1,4,NULL),
(123,117,'Clash of Civilizations and Remaking of the World Order',1900,'en',NULL,12.3,1,4,NULL),
(124,39,'Uncommon Wisdom',1900,'en',NULL,11.20,1,4,NULL),
(125,119,'One',1900,'en',NULL,11.01,1,4,NULL),
(126,120,'To Sir With Love',1900,'en',NULL,18.7,1,4,NULL),
(127,121,'Half A Life',1900,'en',NULL,24.42,1,4,NULL),
(128,122,'The Discovery of India',1900,'en',NULL,23.25,1,4,NULL),
(129,52,'Apulki',1900,'en',NULL,21.09,1,4,NULL),
(130,93,'Unpopular Essays',1900,'en',NULL,12.65,1,4,NULL),
(131,42,'The Deceiver',1900,'en',NULL,13.51,1,4,NULL),
(132,76,'Veil: Secret Wars of the CIA',1900,'en',NULL,41.20,1,4,NULL),
(133,52,'Char Shabda',1900,'en',NULL,14.32,1,4,NULL),
(134,128,'Rosy is My Relative',1900,'en',NULL,42.5,1,4,NULL),
(135,108,'The Moon and Sixpence',1900,'en',NULL,14.30,1,4,NULL),
(136,130,'A Short History of the World',1900,'en',NULL,18.68,1,4,NULL),
(137,108,'The Trembling of a Leaf',1900,'en',NULL,17.21,1,4,NULL),
(138,103,'Doctor on the Brain',1900,'en',NULL,21.10,1,4,NULL),
(139,133,'Simpsons & Their Mathematical Secrets',1900,'en',NULL,21.41,1,4,NULL),
(140,134,'Pattern Classification',1900,'en',NULL,21.4,1,4,NULL),
(141,135,'From Beirut to Jerusalem',1900,'en',NULL,22.32,1,4,NULL),
(142,133,'The Code Book',1900,'en',NULL,24.1,1,4,NULL),
(143,112,'The Age of the Warrior',1900,'en',NULL,10.62,1,4,NULL),
(144,138,'The Numbers Behind Numb3rs',1900,'en',NULL,11.56,1,4,NULL),
(145,47,'A Life in Letters',1900,'en',NULL,14.3,1,4,NULL),
(146,140,'The Information',1900,'en',NULL,16.15,1,4,NULL),
(147,141,'Elements of Information Theory',1900,'en',NULL,17.52,1,4,NULL),
(148,142,'Power Electronics - Rashid',1900,'en',NULL,14.10,1,4,NULL),
(149,143,'Power Electronics - Mohan',1900,'en',NULL,17.51,1,4,NULL),
(150,144,'Neural Networks',1900,'en',NULL,21.20,1,4,NULL),
(151,47,'The Grapes of Wrath',1900,'en',NULL,10.52,1,4,NULL),
(152,52,'Vyakti ani Valli',1900,'en',NULL,10.10,1,4,NULL),
(153,12,'Statistical Learning Theory',1900,'en',NULL,10.99,1,4,NULL),
(154,148,'Empire of the Mughal - The Tainted Throne',1900,'en',NULL,10.87,1,4,NULL),
(155,148,'Empire of the Mughal - Brothers at War',1900,'en',NULL,14.25,1,4,NULL),
(156,148,'Empire of the Mughal - Ruler of the World',1900,'en',NULL,18.58,1,4,NULL),
(157,148,'Empire of the Mughal - The Serpent\s Tooth',1900,'en',NULL,14.65,1,4,NULL),
(158,148,'Empire of the Mughal - Raiders from the North',1900,'en',NULL,17.89,1,4,NULL),
(159,153,'Mossad',1900,'en',NULL,14.56,1,4,NULL),
(160,154,'Jim Corbett Omnibus',1900,'en',NULL,14.19,1,4,NULL),
(161,155,'20000 Leagues Under the Sea',1900,'en',NULL,19.41,1,4,NULL),
(162,156,'Batatyachi Chal',1900,'en',NULL,18.57,1,4,NULL),
(163,156,'Hafasavnuk',1900,'en',NULL,24.12,1,4,NULL),
(164,156,'Urlasurla',1900,'en',NULL,12.35,1,4,NULL),
(165,68,'Pointers in C',1900,'en',NULL,45.4,1,4,NULL),
(166,160,'The Cathedral and the Bazaar',1900,'en',NULL,14.25,1,4,NULL),
(167,161,'Design with OpAmps',1900,'en',NULL,14.21,1,4,NULL),
(168,162,'Think Complexity',1900,'en',NULL,12.63,1,4,NULL),
(169,163,'The Devil\s Advocate',1900,'en',NULL,14.56,1,4,NULL),
(170,45,'Ayn Rand Answers',1900,'en',NULL,24.24,1,4,NULL),
(171,45,'Philosophy: Who Needs It',1900,'en',NULL,13.52,1,4,NULL),
(172,166,'Data Analysis with Open Source Tools',1900,'en',NULL,18.9,1,4,NULL),
(173,167,'Broca\s Brain',1900,'en',NULL,18.98,1,4,NULL),
(174,168,'Men of Mathematics',1900,'en',NULL,17.54,1,4,NULL),
(175,169,'Oxford book of Modern Science Writing',1900,'en',NULL,17.58,1,4,NULL),
(176,170,'Judiciary and Democracy Justice',1900,'en',NULL,14.89,1,4,NULL),
(177,171,'The Arthashastra',1900,'en',NULL,15.87,1,4,NULL),
(178,172,'We the People',1900,'en',NULL,16.25,1,4,NULL),
(179,172,'We the Nation',1900,'en',NULL,11.145,1,4,NULL),
(180,174,'The Courtroom Genius',1900,'en',NULL,12.25,1,4,NULL),
(181,175,'Dongri to Dubai',1900,'en',NULL,14.00,1,4,NULL),
(182,176,'Foundation History of England',1900,'en',NULL,16.52,1,4,NULL),
(183,80,'City of Djinns',1900,'en',NULL,17.52,1,4,NULL),
(184,178,'India\s Legal System',1900,'en',NULL,13.25,1,4,NULL),
(185,179,'More Tears to Cry',1900,'en',NULL,18.65,1,4,NULL),
(186,180,'The Ropemaker',1900,'en',NULL,17.85,1,4,NULL),
(188,182,'The Prince',1900,'en',NULL,19.52,1,4,NULL),
(189,183,'Eyeless in Gaza',1900,'en',NULL,13.25,1,4,NULL),
(190,184,'Tales of Beedle the Bard',1900,'en',NULL,25.63,1,4,NULL),
(191,185,'Girl with the Dragon Tattoo',1900,'en',NULL,18.58,1,4,NULL),
(192,185,'Girl who kicked the Hornet\s Nest',1900,'en',NULL,17.56,1,4,NULL),
(193,185,'Girl who played with Fire',1900,'en',NULL,16.52,1,4,NULL),
(194,28,'Structure and Randomness',1900,'en',NULL,16.34,1,4,NULL),
(195,189,'Image Processing with MATLAB',1900,'en',NULL,13.28,1,4,NULL),
(196,104,'Animal Farm',1900,'en',NULL,24.24,1,4,NULL),
(197,70,'The Idiot',1900,'en',NULL,26.34,1,4,NULL),
(198,192,'A Christmas Carol',1900,'en',NULL,27.17,1,4,NULL);

Tuve que limpiar algunas comillas simples por que sobraban. 😃

QUÉ ES LA DESVIACIÓN ESTÁNDAR Y COMO INTERPRETARLA #1
trading center vol dólarPara muchos la palabra desviación estándar puede sonar desconocida y no la habrán oído nombrar a menos que hayan asistido a una clase de estadística.

Sin embargo no se preocupe, es probable que si ha escuchado la palabra volatilidad, volatilidad del mercado, volatilidad del precio, ya esta familiarizado con el tema, ya que volatilidad lo podemos connotar como movimiento, y significa lo mismo que desviación estándar sino que esta última palabra es usada en estricto sentido matemático

Que es desviación estándar?

Justamente la desviación Estándar, en un conjunto de datos (precios en el caso del mercado de valores) es una medida de dispersión, que nos indica cuánto pueden alejarse los valores respecto al promedio (media), por lo tanto es útil para buscar probabilidades de que un evento ocurra, o en el caso del mercado bursátil, determinar entre que rango de precios puede moverse un determinado activo, y determinar que tipo de activos pueden ser mas volátiles que otros.

Los operadores del mercado están interesados en la dirección del precio de un activo y en la velocidad de los movimientos del subyacente para determinar que tan riesgoso o vólatil puede llegar a ser un activo. Los mercados cuyos precios se mueven lentamente son mercados de baja volatilidad, los mercados cuyos precios se mueven a alta velocidad son mercados de alta volatilidad.

La función TO_DAYS () devuelve el número de días entre una fecha y el año 0 (fecha "0000-00-00"). La función TO_DAYS () solo se puede usar con fechas dentro del calendario gregoriano

gran profesor

Este es mi pequeño aporte:

--1. ¿Qué nacionalidades hay?
select distinct nationality from authors order by nationality;
--2. ¿Cuantos escritores hay de cada nacionalidad?
select nationality, count(*) as num from authors group by nationality order by nationality;
--3. ¿Cuantos libros hay de cada nacionalidad?
select a.nationality, count(b.book_id) as num 
from authors as a
left join books as b on b.author_id = a.author_id
group by a.nationality order by a.nationality;
--4. ¿Cuales son los 10 libros más costosos y baratos?
select title, price from books order by price desc limit 10;
--5. ¿Cual es el promedio/desviación standard del precio de los libros?
SELECT AVG(price) as promedio, STDDEV(price) as desviacion FROM books;
--6. ¿Cual es el precio máximo/mínimo de un libro?
SELECT MAX(price) as maximo, MIN(price) as minimo FROM books;

10 preguntas frecuentes de SQL en entrevistas de trabajo

Según: java67
.
1: SQL para encontrar el segundo salario más alto de los empleados:

select MAX(Salary) from Employee WHERE Salary NOT IN (select MAX(Salary) from Employee ); 

2: SQL para encontrar el salario máximo de cada departamento.

SELECT DeptID, MAX(Salary) FROM Employee GROUP BY DeptID. ```

3: Escriba una consulta SQL para mostrar la fecha actual.

SELECT GetDate(); 

4: Escriba una consulta SQL para comprobar si la fecha pasada a la consulta es la fecha del formato dado o no.

SELECT ISDATE(‘1/08/13’) AS “MM/DD/YY”;

5: Escriba una consulta SQL para imprimir el nombre del empleado distinto cuya fecha de nacimiento es entre el 01/01/1960 al 31/12/1975.

SELECT DISTINCT EmpName FROM Employees WHERE DOB  BETWEEN01/01/1960AND31/12/1975’;

6: Escriba una consulta SQL para encontrar el número de empleados según el género cuya fecha de nacimiento sea entre el 01/01/1960 y el 31/12/1975.

SELECT COUNT(*), sex from Employees WHERE DOB BETWEEN01/01/1960AND31/12/1975GROUP BY sex

7: Escriba una consulta SQL para encontrar un empleado cuyo salario sea igual o superior a 10000.

SELECT EmpName FROM  Employees WHERE  Salary>=10000;

8: Escriba una consulta SQL para encontrar el nombre del empleado cuyo nombre comience con “M”

SELECT * FROM Employees WHERE EmpName like ‘M%’;

9: busque todos los registros de empleados que contengan la palabra “Joe”, independientemente de si se almacenó como JOE, Joe o joe.

SELECT * from Employees  WHERE  UPPER(EmpName) like '%JOE%';

10: Escriba una consulta SQL para encontrar el año desde la fecha.

SELECT YEAR(GETDATE()) asYear”;

Notas de clases:


---¿Cual es el promedio/desviacion standard del precio de los libros?
SELECT title, price FROM books
ORDER BY price ASC LIMIT 10
;

select nationality, 
    count(book_id) as libros,
    AVG(price) AS PROM, 
    STDDEV(PRICE) AS STD
from books as b
JOIN authors as a
    ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY libros DESC 
;

---¿Cual es el precio maximo/minimo de un libro?

SELECT a.nationality, MAX(price), MIN(price)
from books as b
JOIN authors as a
    ON a.author_id = b.author_id
GROUP BY nationality
;

---¿Cómo quedaría el reporte final de préstamos?
SELECT c.name, t.type, b.title,
    CONCAT(a.name, " (", a.nationality,")") AS author,
    TO_DAYS(NOW())-TO_DAYS(t.created_at) AS ago
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
;

No es mi código pero me sirvió para insertar fechas random, lo saqué de [aqui] (https://gist.github.com/vordan/ba944648300efcbc4cfc240a6b21af13)

UPDATE transactions
SET created_at = (select date_format(
    from_unixtime(
         rand() *
            (unix_timestamp('2000-01-30 16:00:00') - unix_timestamp('2019-11-13>
             unix_timestamp('2019-11-13 23:00:00')
                  ), '%Y-%m-%d %H:%i:%s') as datum_roden);

Algo más elegante

SELECT cliente.name, libro.title, CONCAT(autor.name, " [", autor.nationality ,"]") AS 'Autor (Nacionalidad)', transaccion.type, CONCAT(TO_DAYS(NOW()) - TO_DAYS(transaccion.created_at), ' días') AS 'Hace'
FROM transactions AS transaccion
JOIN clients AS cliente
USING(client_id)
JOIN books AS libro
USING(book_id)
JOIN authors AS autor
USING(author_id);
/*3. ¿Cuál es el promedio/desviación standard del precio de libros + idem, pero por nacionalidad*/
SELECT nationality, COUNT(book_id) AS libros, AVG(price) AS prom, STDDEV(price) AS std
FROM books AS b
JOIN authors AS a
ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY libros DESC;

/*4. ¿Cuál es el precio máximo/mínimo de un libro según país?*/
SELECT nationality, MAX(price), MIN(price) FROM books AS b
JOIN authors AS a
ON a.author_id = b.author_id
GROUP BY nationality;

/*5. Reporte final */
SELECT c.name, t.type, b.title,
       CONCAT(a.name, ' (', a.nationality, ')') AS autor,
       TO_DAYS(NOW()) - TO_DAYS(t.created_at) AS ago
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 a.author_id = b.author_id;

muy buenas clases, todo muy claro y bien explicado.

Excelente curso gracias

doble left join para unir varias tablas

Restando y sumando fechas para calculos

Interesante clase

Cuando se utiliza una función de agrupación con como count() se debe recordar que se debe emplear también un GROUP BY. Es importante entender que se debe emplear esto contra una columna pivote

La función CONCAT () agrega dos o más expresiones juntas

Por qué al momento de hacer el reporte a el solo le aparecieron 7 registros ?

CUARTO

SELECT  AVG(price) AS prom, STDEV(price) AS std
FROM    books;

QUINTO

SELECT  MAX(price) price_max, MIN(price) price_min
FROM    books;

SEXTO

SELECT  A.transaction_id,  B.title, CONCAT(C.name,"(", C.nationality, ")"),  D.name , A.created_at fecha
        , TO_DAYS(NOW()) - TO_DAYS(A.created_at) AS TIEMPO
FROM    transactions A
        INNER JOIN books B ON A.book_id = B.book
        INNER JOIN authors C ON B.author =  C.author_id
        INNER JOIN clients D ON A.client_id = D.client_id
WHERE   A.type  = 'sell'
ORDER BY B.title, A.finished;

Excelente contenido de la clases

Hay una pregunta que no se resolvió en la clase anterior

PREGUNTA 3: Cuantos libros hay de cada nacionalidad?

SELECT  DISTINCT 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
GROUP BY a.nationality
ORDER BY a.nationality;

no he entendido bien la funcion de STDDEV alguien me la explica con manzanitas porfa?

Resumen de la Clase:
Funciones:

  • AVG: promedio
  • STDEV: desviación estándar
  • MAX: dato máximo
  • MIN: dato mínimo
  • CONCAT: juntar dos o más cadenas de caracteres
  • TO_DAYS: Recibe como parámetro un datestamp o timestamp de fecha a secas, el formato de la fecha es yyyy-mm-dd

Código:

-- Clase 18 Continuacion Casos de Negocio
SELECT price from books;
-- Cual es el promedio/desviacion estandar del precio de los libros?
SELECT AVG(price) AS prom, STDDEV(price) AS std
    -> FROM books;
-- Idem pero por nacionalidad?
SELECT nationality, AVG(price) AS prom,
    STDDEV(price) AS std
FROM books AS b
JOIN authors as a
    ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY prom DESC;

-- Ordenando

SELECT nationality, 
    COUNT(book_id) AS libros,
    AVG(price) AS prom,
    STDDEV(price) AS std
FROM books AS b
JOIN authors as a
    ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY libros DESC;

-- Cual es el precio maximo/minimo de un libro?
SELECT a.nationality,
    MAX(price), MIN(price) 
FROM books AS b
JOIN authors AS a
    ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY MAX(price) DESC;

-- Como quedaria el reporte de prestamos?
SELECT c.name, b.title, t.type, 
    CONCAT(a.name, " (", a.nationality, ")") AS autor,
    TO_DAYS(NOW() - TO_DAYS(t.created_at)) AS ago
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;

-- agregamos transacciones para ver mejor la tabla
INSERT INTO transactions(book_id, client_id, type, created_at) VALUES(6, 76, 'sell', '2018-01-01');

Es verdad que “debería verse como una oportunidad para aplicar otras cosas” PERO, DEBE ser responsabilidad de una plataforma PAGADA tener los archivos en condiciones adecuadas para su utilización. Es 2022 y todavía la tabla books aparece con precios en NULL.

Es necesario que le presten atención a ese asunto.

Termine el ejercicio con SELECT y basicamente es el rey, ademas agrege la edad de cada cliente. Estoy emocionado por el curso, el profesor explica muy bien y va directo al grano.

SELECT c.name, t.type, b.title,
CONCAT(a.name, " (",a.nationality,")") as author,
TO_DAYS(NOW())- TO_DAYS(t.created_at) as ago,
YEAR(NOW())-YEAR(c.birthdate) as edad
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;

Os dejo una web donde se pueden generar datos masivamente para añadir a vuestras tablas. Puedes decir que tipo de datos por campo, incluso hay funciones que puedes poner como por ejemplo que solo sean de un país, o que un número sea un random de 1 a 100.

https://www.mockaroo.com/

Definitivamente el comando SELECT es el rey en SQL.

Comandos muy útiles para la vida real, me gustaron esos ejemplos

Dios sabrá que es eso jajajaja morí XD

Sin duda este ha sido de mis cursos favoritos dentro de Platzi!

Hola, tengo una duda que todavia no la puedo resolver, con que proposito despues del join se utiliza el ON?

MAX() funciones
MIN() Funciones

inner Join me permite agrupa tanto la tabla a con la tabla b en relacion de ambas

El orden del where es importante, colocar primero las mas fáciles de procesar para ir reduciendo las tuplas y después las mas difíciles

Les comparto que desde el día cero hasta el día en que deje de ir a la escuela por la pandemia tuvieron que pasar 737862 días, por lo que llevo algo así como 324 días solo frente a la pantalla
https://drive.google.com/file/d/1e7EMVpB_5d_e5MnqkQVUdr-O5J7IHijo/view?usp=sharing

Cabe destacar que la función STDDEV calcula la desviación estándar POBLACIONAL, si quieren calcular la de una muestra es con la función STDDEV_SAMP

Traduciendo preguntas a Queries de SQL en Casos de Negocio:

.

1.- ¿Qué nacionalidades hay?

SELECT DISTINCT nationality FROM authors
ORDER BY nationality;

2.- ¿Cuántos escritores hay de cada nacionalidad?

--- importante agrupar por columna correcta al utilizar COUNT
SELECT nationality, COUNT(author_id) AS c_authors
FROM authors
WHERE nationality IS NOT NULL
GROUP BY nacionality
ORDER BY authors DESC, nacionality ASC

3.- ¿Cuántos libros hay de cada nacionalidad?

4.- ¿Cuál es el promedio/desviación estándar del precio de libros?

SELECT nationality,
	COUNT(book_id) as libros,
	AVG(price) as prom,
	STDDEV(price) AS std,
FROM books as b
JOIN authors as a
	ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY libros DESC;
SELECT nationality, MAX(price), MIN(price)
FROM books as b
JOIN authors AS a			
	ON a.author_id = b.author_id
GROUP BY nationality;

7.- ¿Cómo quedaría el reporte de préstamos?

SELECT c.name, t.type, b.title, 
CONCAT (a.name, "(", a.nationality, ")") AS autor
TO_DAYS(now()) - TO_DAYS(t.created_at) AS ago
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

--- To_Days(now()) Nos da la información sobre cuantos días han pasado para comparar fechas numéricas.
SELECT c.name, t.type, b.title, 
  CONCAT(a.name, " (", a.nationality, ")") AS autor,
  TO_DAYS(NOW()) - TO_DAYS(t.created_at)
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;
"Average function "
SELECT nationality,
    AVG(price) as prom,
    COUNT (book_id) AS libros,
    STDDEV(price) AS std 
FROM books as b 
JOIN authors as a 
ON a.author_id = b.author_id
GROUP BY nationality 
ORDER BY prom DESC 
; 

SELECT nationality MAX(price), MIN(price)
FROM books AS b
JOIN authors AS a
ON a.author_id = b.author_id
GROUP BY nationality
;```

Great!

Excelente !!!

excelente clase!!

FUNCIÓN TO_DAYS(), recibe como parámetros un TIMESTAMP, DATETIME o una fecha a secas, y nos retorna el número de días desde el 1 de enero del año 0 hasta la fecha que pasamos como parametro.

Que buena clase !!

Tuvo suerte que diera el mismo resultado porque no existía ningún libro del año 1950, sino de lo contrario la suma daría diferente del total ya que la condición excluye este año.

excelente curso

excelentes clases

Excelente.

Como esta profesor con usted estoy aprendiendo mucho, gracias!

WOw mas de un año y medio, jejeje

SELECT t.type
    ,c.name
    ,b.title
    ,CONCAT(a.name," (", a.nationality ,")")
    ,TO_DAYS(NOW()) - TO_DAYS(t.created_at) AS ago
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;

script pregunta 6

script concat y todays

Entendido

SELECT price FROM books;

SELECT price FROM books ORDER BY price DESC LIMIT 10;

UPDATE books SET price = FLOOR(RAND()*(35-5+1)+5) WHERE PRICE IS NULL;  -- ACTUALIZAR LOS PRECIOS NULL

SELECT price FROM books ORDER BY price  LIMIT 10;

SELECT AVG(price) FROM books ;

SELECT nationality, AVG(price) AS PROM, STDDEV(price) AS STD 
FROM books AS b INNER JOIN authors AS a  ON b.author_id = a.author_id 
GROUP BY nationality;

SELECT nationality, AVG(price) AS PROM, STDDEV(price) AS STD 
FROM books AS b INNER JOIN authors AS a  ON b.author_id = a.author_id 
GROUP BY nationality
ORDER BY PROM DESC;

SELECT nationality, COUNT(book_id) AS BOOK, AVG(price) AS PROM, STDDEV(price) AS STD 
FROM books AS b INNER JOIN authors AS a  ON b.author_id = a.author_id 
GROUP BY nationality
ORDER BY BOOK DESC;

SELECT MAX(price) , MIN(price) FROM books;

SELECT nationality, MAX(price) , MIN(price) 
FROM books AS b INNER JOIN authors AS a  ON b.author_id = a.author_id 
GROUP BY nationality;

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;

SELECT c.name,t.type, b.title,  CONCAT(a.name, " (" , a.nationality, ")") AS AUTOR
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;

SELECT name, TO_DAYS(birthdate) from clients;

SELECT c.name,t.type, b.title,  CONCAT(a.name, " (" , a.nationality, ")") AS AUTOR,
TO_DAYS(NOW()) - TO_DAYS(t.created_at) AS AGO
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;
SELECT nationality,
COUNT(book_id) AS libros,
AVG(price) AS prom,
STDDEV(price) AS std
FROM books AS b
JOIN authors AS a
ON a.author_id = b.author_id
GROUP BY nationality
ORDER BY libros DESC;

No me termina de quedar claro por qué en la consulta para el reporte final se usa LEFT JOIN, sería porque si tengo cliente, libro o autor nulos, no recupera el registro?

Es motivante cuando vemos que avanzamos con lo aprendido.

¿Cuál es el libro más caro y más económico de la librería?

SELECT title, MAX(b.price) AS prices 
FROM books AS b
UNION
SELECT title, MIN(b.price)
FROM books AS b;

Excelente clase.

Definitivamente esto es mucho más cool que un excel,
😃

Siempre tener en cuenta la información inferible.

TO_DAYS(): Cuantos días han pasado.

AVG(): Para el promedio

buen curso, solo que despues de instalar el mysql de la pagina oficial, y de estar haciendo los ejemplo, al otro dia no me volvio a dejar entrar y desinstale eso, segui con xampp y haciendo los ejercicios con el cuadro de SQL, no me quedo claro como meter los datos a la tabla de transacciones, me imagino que ese es el reto. como quien dice vuelva a verlo :v

  1. Cuantos libros hay de cada nacionalidad?
select a.nationality, count(b.author_id)
from authors as a
join books as b
  on a.author_id = b.author_id
group by nationality

CONCAT(): Para juntar dos o más cadenas de caracteres.

La respuesta a la 4. debería ser algo así:

SELECT COUNT(book_id) AS libros,
    AVG(price) AS prom,
    STDDEV(price) AS std
FROM books as b
JOIN authors as a
    ON a.author_id = b.author_id
ORDER BY libros DESC;

Ya que nos piden el promedio y desviación estándar de todos los libros pero sin distinción de nacionalidad.

1-que nacionalidades hay?

SELECT DISTINCT nationality FROM authorS ORDER BY nationality;

2-cuantos escritores hay de cada nacionalidad?

select nationality, count(author_id) AS c_authors
FROM authorS
WHERE nationality IS NOT NULL
GROUP BY nationality
ORDER BY c_authors DESC, nationality ASC;```

3-cuantos libros hay de cada nacionalidad?


SELECT DISTINCT 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
GROUP BY a.nationality
ORDER BY a.nationality;





Muy interesante!! Gracias!!

Muy buenos ejemplos de consultas para los casos de negocios.

Casos de negocio muy acordes con lo que hay detrás del BI en una compañía.

Buen día.

Hizo falta la explicación del punto 3, sin embargo a continuación les comparto el Query;

Una pregunta, sé que se puede utilizar PHP para manejar base de datos MySQL conservidores tipo apache pero… Con NodeJs, podría también hacer lo mismo? Ya saben, como mandar formularios con la sentencia del SELECT * FROM TABLE() VALUES () sí con el mysqli_query. Podría utilizar eso? Es decir, veo la gran utilidad de estas bases de datos y pues sabía que manejar el backend con PHP, bien… Pero se puede con Node o con node sólo se utiliza bases NoSQL? Aparte, podría hacer Reactjs NodeJS y MySQL?

Buenos días. Me queda una inquietud.
¿Cómo puedo filtrar la tabla que sale después de aplicar un GROUP BY?

Intenté el siguiente código pero no funcionó:

SELECT a.name, AVG(price) AS p_promedio
FROM books AS b
JOIN authors AS a
  ON a.author_id = b.author_id
GROUP BY a.author_id
ORDER BY p_promedio DESC
WHERE p_promedio IS NOT NULL;

si omito la última linea funciona. Pero al usar la base de datos que no tenía precios salen muchas filas en NULL que me gustaría poder ocultar. O en el caso en que todos los libros tubieran precio poder escoger solo los que tengan cierto valor en promedio.

Algunas de las funciones de agrupación que se puede utilizar en MySQL son:

  • count(nombre de la columna) retorna la cuenta de los valores que existen en el campo especificado.
    select count(nombre de la columna) from tabla;
  • sum(nombre de la columna) retorna la suma de los valores que contiene el campo especificado.
  • max(nombre de la columna) retorna el valor máximo
  • min(nombre de la columna) retorna el valor mínimo
  • avg(nombre de la columna) retorna el promedio
  • stddev(nombre de la columna) desviación estándar
    OJO entre el nombre de la función y el paréntesis no debe haber espacios.
¿cuántos libros hay de cada nacionalidad?

SELECT a.nationality, COUNT(b.book_id) AS c_books
FROM books AS b 
JOIN authors AS a ON
    b.author_id = a.author_id
WHERE a.nationality IS NOT NULL
GROUP BY a.nationality
ORDER BY c_books DESC
;


¿cual es el promedio/desviación standard del precio de libro?

SELECT AVG(price)
FROM books;


SELECT AVG(price) AS promedio, STDDEV(price) AS desviacion_estandar
FROM books;

SELECT 
    a.nationality,
    AVG(b.price) AS promedio, 
    STDDEV(b.price) AS desviacion_estandar
FROM books AS b 
JOIN authors AS a ON
    b.author_id = a.author_id 
GROUP BY a.nationality
ORDER BY promedio DESC
;


item, por nacionalidad

SELECT 
    a.nationality,
    COUNT(b.book_id) AS c_books,
    AVG(b.price) AS promedio, 
    STDDEV(b.price) AS desviacion_estandar
FROM books AS b 
JOIN authors AS a ON
    b.author_id = a.author_id 
GROUP BY a.nationality
ORDER BY c_books DESC
;


cuál es el precio máximo/mínimo de un libro

SELECT title, price 
FROM books
ORDER BY price DESC 
LIMIT 10
;

SELECT MAX(price), MIN(price)
FROM books;


SELECT nationality, MAX(price), MIN(price)
FROM books AS b 
JOIN authors AS a ON
    b.book_id = a.author_id
GROUP BY nationality
;

¿cómo quedaría el reporte de préstamos?

SELECT 
    c.name AS Cliente, 
    t.type, 
    b.title, 
    CONCAT(a.name, " (", a.nationality, ")") AS Author,
    TO_DAYS(NOW()) - TO_DAYS(t.created_at) AS ago
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 a.author_id = b.author_id
;```

A los que les salga este error
ERROR 1630 (42000): FUNCTION pruebaplatzi.COUNT does not exist. Check the ‘Function Name Parsing and Resolution’ section in the Reference Manual
Únicamente es quitar el espacio entre el COUNT y el paréntesis “(”

//Bad
COUNT (book_id)
//Good
COUNT(book_id)
<h3>Define standard deviation:</h3>

a quantity expressing by how much the members of a group differ from the mean value for the group.

Remember that if you accidentally inserted value you did not wanted to insert, just delete it 😃

DELETE FROM books WHERE id_book = <id>;