Advertisement
imask3r

Untitled

Jun 24th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 65.95 KB | None | 0 0
  1. -------------Fabricantes y Artículos----------------------------
  2.  
  3. - Todos los productos de la tienda:
  4. select art.nombre from articulos art
  5.  
  6. - Todos los precios y nombres de los productos:
  7. select art.nombre ,art.precio from articulos art
  8.  
  9. - Nombre de los productos cuyo precio sea menos a 200€
  10. select art.nombre from articulos art where precio < 200 ; employees
  11.  
  12. - Nombre de los productos cuyo precio esté entre 250 y 300€
  13. select nombre from articulos where precio >=250 and precio <=300;
  14.  
  15. select nombre from articulos where precio between 250 and 300;
  16.  
  17. - El precio seguido de el simbolo euro de todos los productos
  18. select concat(precio,"€") from articulos
  19.  
  20. - El precio en pesetas del los productos
  21. select precio*166 from articulos;
  22.  
  23. - El promedio de todos los articulos
  24. select avg(precio) from articulos
  25.  
  26. - El promedio de los articulos de cada fabricante
  27. select nombre,avg(precio) from articulos
  28. join fabricante on fabricante.id=articulos.id_fabricante
  29. group by fabricante.id
  30. - El precio del articulo más caro y el precio del articulo más barato
  31. select max(precio),min(precio) from articulos;
  32.  
  33. -El nombre de los fabricantes cuya media de los articulos sea mayor a 250€
  34. select avg(articulos.precio) from
  35. fabricantes join articulos on fabricante.id=articulos.id_fabricante
  36. having avg(articulos.precio)>250 ;
  37.  
  38. - Aplicar un descuento del 20% a todos los articulos del fabricante "TODO A 100"
  39. update articulos join fabricantes on fabricante.id=articulos.id_fabricante set precio=precio*0,8 where fabricante.nombre like "todo a 100";
  40.  
  41. -Nombre del fabricante que más articulos tiene
  42. select fabricantes.nombre, count(precio) total from fabricantes join articulos on fabricantes.id=articulos.id_fabricante group by fabricantes.id order by total desc limit 1
  43.  
  44. ----------------------- Empleados y Departamentos ----------------------------------------
  45.  
  46.  
  47. - El nombre y apellido de todos los empleados
  48. SELECT nombre, apellidos from empleados;
  49.  
  50. - El listado de todos los apellidos sin que se repitan
  51. select distinct apellidos from empleados;
  52.  
  53. - Todos los datos de los empleados que se apelliden "Martínez"
  54. SELECT * FROM Empleados WHERE Apellido like "Martinez"
  55.  
  56. - Todos los datos de los empleados que se apelliden "Martínez" y los que se apelliden "Gutierrez"
  57. select * from empleados where apellidos like "martinez" or apellidos like "gutierrez";
  58.  
  59. select * from empleados where apellidos in ("martinez", "gutierrez");
  60.  
  61. -Todos los empleados cuyo apellido empiece por "p" y no tenga ninguina "a"
  62. select * from empleados where apellidos like "p%" and apellidos not like "%a%"
  63.  
  64. -El presupuesto de todos los departamentos
  65. select sum(presupuesto) from departamentos;
  66.  
  67. - El número de empleados de cada departamento
  68. select departamentos.nombre, count(*) from empleados join departamentos on empleados.id_departamento=departamentos.id group by departamentos.nombre departamentos.id
  69.  
  70. select departamentos.nombre, count(empleados) from empleados
  71. join departamentos on departamentos.id=empleados.id_departamento group by departamentos.id
  72.  
  73. - Obtener el nombre, apellidos y departamento de todos los empleados cuyo apellido empiece por "Z" y el departamento tiene un presupuesto mayor a 60000€
  74. SELECT Empleados.nombre, apellidos, departamentos.nombre from empleados
  75. join departamentos on departamentos.id=empleados.id_departamento where Apellidos like "Z%" and presupuesto > 60000;
  76.  
  77. -La media del presupesto total
  78. select avg(presupuesto) from departamentos
  79. select avg(presupuesto) from departamentos;
  80.  
  81. - la planta que más presupuesto tiene
  82. select sum(presupuesto) suma, planta from departamentos group by planta order by suma desc limit (0,1)
  83.  
  84. - los nombres de los departamentos que tienen más de dos empleados
  85.  
  86. select departamento.nombre, count(*) cuenta from departamentos
  87. join empleados on empleados.id_departamento= departamentos.id
  88. group by id_departamento
  89. having cuenta>=2
  90.  
  91. - insertar 2 departamentos nuevos y 3 empleados nuevos
  92. insert into departamentos (nombre,presupuesto,planta) values (admin,100000,4), (am,1005500,3);
  93.  
  94. INSERT INTO empleados (Nombre, Apellido, Dni, id_departamento) VALUES ("Pepillo", "Fulgensio", "32144356u", 2218),("Juancho", "Martines", "2474732", 2475),( "jazma","tirapiedras", "1234567T",1);
  95.  
  96. - Aumentar el presupuesto en un 10% a los departamentos de las plantas 2,3y 4
  97.  
  98. update departamentos set presupuesto=presupuesto*1.1 where planta=2 or planta=3 or planta=4;
  99.  
  100. - eliminar todos los empleados del departamento de "MARKETING"
  101.  
  102. delete empleados from empleados join departamentos on empleados.id_departamento=departamentos.id
  103. where departamentos.nombre like "Marketing";
  104.  
  105. ---------------------------------- SOBRE SAKILA UNA TABLA ----------------------------------------------------------
  106.  
  107. 1.- El id del actor que sale en más peliculas b:(nombre del actor/actriz)
  108. select actor_id, count(*) total from film_actor group by actor_id order by total desc limit 1
  109. b:
  110. select actor.first_name,count(*) total from film_actor join actor on actor.actor_id=film_actor.actor_id group by actor_id order by total desc limit 1;
  111. select actor.first_name,count(*) total from film_actor join actor using (actor_id) group by actor_id order by total desc limit 1;
  112.  
  113. 2.- El id de la categoria que más peliculas tiene b:(nombre de la categoría)
  114. select category_id, count(*) total from film_category group by category_id order by total desc limit 1
  115. b:
  116. select category.name, count(*) total from film_category
  117. join category using (category_id)
  118. group by category_id order by total desc limit 1
  119.  
  120. 3.- El Id del cliente que alquiló la última pelicula b:(el email y el teléfono)
  121. select customer_id from rental order by rental_date desc limit 1;
  122. b:
  123. select email, phone from customer
  124. join address using (address_id)
  125. join rental using (customer_id)
  126. order by rental_date desc limit 1;
  127.  
  128. 4.- El precio medio de las peliculas b: (y duracion media)
  129. select avg(rental_rate) from film
  130. b:
  131. select avg(rental_rate), avg(length) from film
  132.  
  133. 5.- El id de la ciudad donde residen más personas b:(el nombre del país)
  134. select city_id, count(*) total from address group by city_id order by total desc limit 1;
  135. b:
  136. select country, count(*) total from country
  137. join city USING (country_id)
  138. join address using (city_id)
  139. group by country_id order by total desc limit 1;
  140.  
  141. 6.- el id del pais con menos ciudades
  142. select country_id, count(*) total from city group by country_id order by total asc limit 1;
  143.  
  144. 7.- el id del ejemplar que más veces se ha alquilado b:(el nombre de la película)
  145. select inventory_id from rental group by inventory_id order by count(*) desc limit 1;
  146. b:
  147. select film.title from inventory join film using (film_id) join rental using (inventory_id) group by film_id order by count(*) desc limit 1;
  148.  
  149. 8.- el id del mejor cliente y del peor b:(el país del cliente) c:(El país que más dinero me ha dejado)
  150. select customer_id,sum(amount) total from payment group by customer_id order by total desc limit 1
  151. select customer_id,count(*) total from rental group by customer_id order by total desc limit 1;
  152. b:
  153. select country, customer_id,sum(amount) total from payment
  154. join customer using (customer_id)
  155. join address using (address_id)
  156. join city using (city_id)
  157. join country using (country_id)
  158. group by customer_id order by total desc limit 1
  159.  
  160. c:
  161. select country, sum(amount) total from payment
  162. join customer using (customer_id)
  163. join address using (address_id)
  164. join city using (city_id)
  165. join country using (country_id)
  166. group by country_id order by total desc limit 1
  167.  
  168. 9.- El día de la semana que mas alquileres se hacen
  169. select DAYNAME(rental_date) from rental group by DAYNAME(rental_date) order by count(*) desc limit 1
  170.  
  171. 10.- cuantos empleados no tienen password
  172. select count(*) total from staff where password is null or password ="";
  173.  
  174. 11.- nombre de los clientes que han pagado sobrecargo
  175. select distnct customer.first_name, customer.last_name from customer join payment using (customer_id) group by rental_id having count(*) > 1;
  176. select distnct customer.first_name, customer.last_name, count(*) total from customer join payment using (customer_id) group by rental_id having total > 1;
  177.  
  178. 12.- Nombre de los clientes vip (han alquilado mas de 15 peliculas en algún mes)
  179. select DISTINCT customer.first_name, customer.last_name from customer join rental using (customer_id) group by month(rental_date), year(rental_date), customer_id having count(*) > 15;
  180.  
  181. 13.- nº de clientes de cada tienda
  182.  
  183. select count(*),store_id from customer group by store_id;
  184.  
  185. 14.- Fecha de los días que se hicieon menos de 100 alquileres
  186. select count(*) total, date(rental_date) fecha from rental GROUP BY fecha having total < 100
  187.  
  188. 15.- Nº de peliculas que se alquilan en cada tienda
  189. select count(distinct film_id) total, store_id from inventory GROUP BY store_id
  190.  
  191. 16.- Nombre de la primera película y nombre del cliente del primer alquiler
  192. select film.title, customer.first_name, customer.last_name from rental join inventory using(inventory_id) join film using (film_id) join customer using (customer_id) order by rental_date, rental_id limit 1;
  193.  
  194. --------------------------------------
  195.  
  196. - Nombre del trabajador que ha procesado mas películas
  197. select first_name, last_name from staff join rental using (staff_id) group by staff_id order by count(*) desc limit 1;
  198.  
  199. - Título de la película que mas ha alquilado el empleado que tiene como login "mike".
  200.  
  201. select title from film
  202. join inventory using (film_id)
  203. join rental using (inventory_id)
  204. join staff using (staff_id)
  205. where staff.username like "Mike"
  206. group by film_id
  207. order by count(*) desc limit 1;
  208.  
  209. ------------------------------------------------------
  210.  
  211. PARA ESTAS TABLAS:
  212.  
  213. - Proveedores (P_ID, PNOMBRE, CATEGORIA, CIUDAD)
  214. - Componentes (C_ID., CNOMBRE, COLOR, PESO, CIUDAD)
  215. - Articulos (T_ID, TNOMBRE, CIUDAD)
  216. - Envios (P_ID, C_ID, T_ID, CANTIDAD)
  217.  
  218. 1. Obtener todos los detalles de todos los artículos de CACERES.
  219. select * from artículos where ciudad like "Cáceres";
  220.  
  221. 2.- Obtener todos los IdP de los proveedores que abastecen el artículo cuyo T_ID es "T1"
  222. select DISTINCT P_ID from envios where t_id="t1";
  223.  
  224. 3. Obtener el COLOR y la CIUDAD de lOS COMPONENTES
  225. select DISTINCT color, ciudwad from componentes;
  226.  
  227. 4.- Obtener de la tabla de artículos EL Id_T y LA CIUDAD donde el nombre de la ciudad acaba en D o contiene al menos una E.
  228. select id_t, ciudad where ciudad like "%D" or ciudad like "%E%";
  229.  
  230. 5.- Obtener EL NOMBRE DE los proveedores que suministran DEL el artículo T1 el componente C1
  231. select pnombre from proveedores join envios using(P_ID) where T_ID like "T1" and C_ID like "C1".
  232.  
  233. 6.- Todos los nombres de los artículos abastecidos por el proveedor "Recambios Martínez"
  234. select distinct tnombre from articulos join envios using(T_ID) join proveedor using(P_ID) where pnombre like "Recambios Martinez";
  235.  
  236. 7.- Nombre de los componentes que estánen la ciudad de "Matalascañas"
  237. select distinct CNOMBRE where CIUDAD like "Matalascañas"
  238.  
  239. 8.- Los proveedores que suministran para un artículo de "Barcelona" o "Tarragona" un componente de color "Naranja" o "Verde".
  240. select DISTINCT pnombre from proveedores join envios using(P_ID) join componentrs using(C_ID) join articulos using (t_id) where (articulos.ciudad like "Barcelona" or articulos.ciudad like "Tarragona") and (color like "Naranja" or color like "verde");
  241.  
  242. 9.- Todos los proveedores que suministran articulos de "madrid" o de "Toledo" y no son de la categoría "MARINO"
  243. select pnombre from proveedores join envios using(P_ID) join articulos using(T_ID) where (articulos.ciudad like "Madrid" or articulos.ciudad like "Toledo") and (proveedores.categoria not like "Marino");
  244.  
  245. 10.- ciudad del proveedor , id_c y ciudad de los articulos cuya ciudad del proveedor sea distinta de la ciudad del artículo
  246. select distinct proveedores.ciudad, C_ID, articulos.ciudad from proveedores join envios using(P_ID) join articulos using(T_ID) where articulos.ciudad not like proveedores.ciudad
  247.  
  248. 11.- Obtener el número de suministros, el de artículos distintos suministrados y la cantidad total de artículos suministrados por el proveedor P2
  249. select count(*) suministros, count(distinct t_id) num_articulos, sum(cantidad) total_articulos_suministrados from envios where p_id="p2"
  250.  
  251. 12.- Para cada artículo y componente suministrado obtener los valores de C_ID, T_ID y la cantidad total correspondiente.
  252. select c_id, t_id, sum(cantidad) total from envios group by c_id, t_id
  253.  
  254. 13.- Numero de envíos de componentes de color rojo por cada proveedor.
  255. select pnombre, count(*) from envios join proveedores using (p_id) join componentes using (c_id) group by p_id where componentes.color="rojo"
  256.  
  257. 14.- Listado de todos los colores de los componentes disponibles
  258. select DISTINCT color from componentes
  259.  
  260. 15.- El color de los componentes que tiene la media del peso más alto
  261. select color, avg(peso) from componentes group by color order by avg(peso) desc limit 1
  262.  
  263. select color , avg(peso) pes from componentes group by color having pes = (select avg(peso) from componentes group by color order by avg(peso) desc limit 1);
  264.  
  265. 16.- Los componentes que tienen un peso mayor a la media
  266. select * from componentes where peso > (Select avg(peso) from componentes);
  267.  
  268. --------------------------------------- SOBRE DIRECTORES Y DESPACHOS ------------------------------------
  269.  
  270. 1.- El nombre de los directores que no tiene jefe
  271. select nombre from directores where id_jefe is null
  272.  
  273. 2.- id de los despachos que tienen mas de un director
  274. select id_despacho from directores group by id_despacho having count(*) > 1
  275.  
  276. 3.- Nombre de los directores cuyos jefes no tienen jefe
  277. select nombre from directores where id_jefe in (select id from directores where id_jefe is null)
  278.  
  279. 4.- listado de los despachos junto con el numero de directores que tiene cada uno
  280. select despachos.nombre, count(*) from despachos join directores on id_despacho=despachos.id group by id_despacho
  281.  
  282. 5.-El nombre de los despachos que están saturados
  283. SELECT *
  284. FROM despachos de
  285. WHERE de.capacidad < (SELECT COUNT(*)
  286. FROM directores di
  287. WHERE di.id_despacho = de.id);
  288.  
  289.  
  290. select despacho.nombre from despachos join directores on despachos.id=id_despachos group by id_despacho having count(*)>capacidad
  291.  
  292. 6.-Nombre de los directores y de sus jefes
  293. select d1.nombre, d2.nombre from directores d1 join directores d2 on d1.id_jefe=d2.id
  294.  
  295. 7.-nombre de los despachos que tienen por lo menos dos jefes supremos
  296. select despachos.nombre from despachos join directores on despachos.id=id_despachos group by id_despachos where id_jefe is null having count(*) >= 2
  297.  
  298. 8.- nombre de los despachos que mas directores tienen
  299. select despachos.nombre, count(*) total from directores join despachos on id_despachos=despachos.id group by id_despachos having total =(select count(*) from directores group by id_despachos order by 1 desc limit 1)
  300.  
  301. 9.- el nombre de los directores que estan en despachos cuya capacidad es menor a la media
  302. select directores.nombre from directores join despachos on despacho.id=id_despacho where capacidad < (select avg(capacidad) from despachos)
  303.  
  304. 10.- el nombre de los jefes que mas empleados directos tiene
  305. select nombre, count(*) total from directores group by jefe_id having total = (select count(*) total from directores GROUP BY jefe_id order by 1 desc limit 1);
  306.  
  307. ----------------------------------------------SOBRE TIENDA DE ROPA ---------------------------------------------------------------
  308.  
  309. 1.- lista de productos ordenados por su stock (primero el que mas stock tiene)
  310. select nombre, sum(cantidad) tot from productos join stock using (id_producto) group by id_producto order by tot desc
  311.  
  312. 2.- Todos los productos de lana de la categoria Jersey de color negro talla "S" que pueda comprar en la tienda
  313. select nombre from productos join composicion using (id_producto) join materiales using (id_material) join stock using (id_producto) join colores using (id_color) join tallas using (id_tallas) join categorias using (id_categoria) where categoria.nombre="Jersey" and material="Lana" and talla="S" and color="negro" and cantidad > 0 and procentaje>50
  314.  
  315. 3.- Cuantas cazadoras de piel distintas te puedes llevar a tu casa ahora mismo de la talla "XL"?
  316. select count(distinct id_producto) from material join composicion using(material_id) join producto using(id_producto) join stock using(id_producto) join talla using(talla_id) where stock.cantidad > 0 and tallas.talla like "XL" and material.material like "piel" and porcentaje <50 and categoria like "cazadora"
  317.  
  318. 4.- Los colores que mas están de moda
  319. select color from colores join stock using(color_id) group by id_color having count(DISTINCT id_producto) =
  320. (select count(distinct id_producto) t from stock group by id_color order by t desc limit 1)
  321.  
  322. 5.- la categoria que mas subcategorias tiene
  323. select nombre from categorias group by id_subcategoria having count(*)=(select count(*) t from categorias group by id_subcategoria order by t desc limit 1);
  324.  
  325. -------------------------------------------SOBRE SAKILA DIFICULTAD MEDIA -------------------------------------------
  326.  
  327. 1.- La suma de las apariciones de los 3 actores que mas salen en las peliculas
  328. select sum(num_apariciones) from (select count(*) num_apariciones from film_actor group by actor_id order by num_apariciones desc limit 3) tb1
  329.  
  330. 2.-nombre y apellidos de los clientes que han alquilado menos que la media (en número de veces)
  331.  
  332.  
  333. SELECT first_name,last_name ,COUNT(*) alquileres FROM customer JOIN rental USING(customer_id) GROUP BY
  334. customer_id HAVING alquileres <(SELECT AVG(alquileres2) FROM (SELECT COUNT(*) alquileres2 FROM customer
  335. JOIN rental USING(customer_id) GROUP BY customer_id) a) order by alquileres
  336.  
  337. 3.- Nombre y apellidos del actor mas polifacético
  338.  
  339. SELECT first_name,last_name,COUNT(distinct category_id) total FROM actor JOIN film_actor USING(actor_id) JOIN film_category USING(film_id) GROUP BY actor_id
  340. having total=(select COUNT(distinct category_id) total2 FROM actor JOIN film_actor USING(actor_id) JOIN film_category USING(film_id) GROUP BY actor_id order by total2 desc limit 1)
  341. ORDER BY total DESC, first_name ASC , last_name ASC;
  342.  
  343. 4.-el título de las películas que están el el top 3 mas alquiladas
  344.  
  345. SELECT title, film_id, COUNT(*) FROM film join inventory using (film_id) JOIN rental USING(inventory_id) GROUP BY film_id HAVING COUNT(*) >=
  346. (SELECT DISTINCT COUNT(*) FROM inventory JOIN rental USING(inventory_id) GROUP BY film_id ORDER BY COUNT(*) DESC LIMIT 2,1);
  347.  
  348. SELECT title,film_id, COUNT(*) FROM film join inventory using(film_id) JOIN rental USING(inventory_id) GROUP BY film_id HAVING COUNT(*) IN
  349. (SELECT * FROM (SELECT DISTINCT COUNT(*) FROM inventory JOIN rental USING(inventory_id) GROUP BY film_id ORDER BY COUNT(*) DESC LIMIT 3) a);
  350.  
  351. 5.- El nombre, apellidos y teléfono de los clientes que se han pasado de tiempo y también el numero de veces que se han pasado de tiempo
  352.  
  353. select first_name, last_name, phone, count(*) tarde from address join customer using (address_id) join rental using (customer_id) join inventory using (inventory_id) join film using (film_id)
  354. where rental_duration < datediff(return_date, rental_date) group by customer_id order by tardedesc;
  355.  
  356. 6.- crear un pago por cada alquiler devuelto fuera de plazo con un importe igual al rental_rate de la película multiplicado por el número de días que se ha pasado.
  357.  
  358. INSERT INTO payment (staff_id,customer_id,rental_id,payment_date,amount) SELECT staff_id, customer_id, rental_id, now(), rental_rate*(datediff(return_date,rental_date) -rental_duration) from
  359. customer join rental using (customer_id) join inventory using (inventory_id) join film using (film_id) where rental_duration < datediff(return_date, rental_date);
  360.  
  361. select * from payment where payment_date>date(now());
  362.  
  363. delete from payment where payment_date>date(now());
  364.  
  365. 7.- (añadir en la tabla de film uan columna llamada top3 de tipo tiny int (1))
  366. Poner el campo top3 a 1 en las peliculas mas alquiladas
  367.  
  368. update film set top3=1 where film_id in (
  369. SELECT film_id FROM inventory JOIN rental USING(inventory_id) GROUP BY film_id HAVING COUNT(*) IN
  370. (SELECT * FROM (SELECT DISTINCT COUNT(*) FROM inventory JOIN rental USING(inventory_id) GROUP BY film_id ORDER BY COUNT(*) DESC LIMIT 3) a)
  371. );
  372.  
  373. 8.- (añadir en la tabla de film una columna llamada alquileres de tipo int (6))
  374. Rellenar el campo alquileres con el número de veces que se ha alquilado cada película.
  375.  
  376. update film f1
  377. set alquileres=(Select count(*) from inventory join rental using (inventory_id) where inventory.film_id=f1.film_id);
  378.  
  379. select * from film order by alquileres desc;
  380.  
  381. 9.- Eliminar todos los pagos de menos de 3€ de Linda Williams hechos en domingo.
  382.  
  383. DELETE payment FROM payment JOIN customer USING (customer_id)
  384. WHERE first_name="Linda" AND last_name="Williams" AND amount<3 and DAYOFWEEK(payment_date)=1;
  385.  
  386. 10.- Modificar todas las descripciones de las películas añadiendo al final de la descripción "Muy barata" a todas las películas con un precio menor a la media.
  387.  
  388. update film
  389. set description = CONCAT(film.description,' MUY BARATA') where rental_rate < (select * from (select avg(rental_rate) from film) a);
  390.  
  391. 11.- la pareja de actores que mas veces han trabajado juntos / listado de parejas que han trabajado juntos y cuantas veces han sido.
  392.  
  393. select a1.first_name, a1.last_name, a2.first_name, a2.last_name, count(*) total
  394. from actor a1 join film_actor f1 on a1.actor_id=f1.actor_id join film_actor f2 on f1.film_id=f2.film_id join actor a2 on a2.actor_id=f2.actor_id
  395. where a1.actor_id!=a2.actor_id
  396. group by a1.actor_id, a2.actor_id
  397. order by total desc;
  398.  
  399.  
  400. ---------------------------------------------------------- SOBRE NORTHWIND ------------------------------------
  401.  
  402. 1.- Nombre de las distintas compañias de los clientes que tienen algun encargo sin procesar.
  403. select distinct company from customers
  404. join orders using(customer_id)
  405. where status_id =0;
  406.  
  407. select distinct customers.company, status_name from customers join orders on customers.id=orders.customer_id
  408. join orders_status on orders.status_id=orders_status.id where status_name like "new";
  409.  
  410. 2.- Nombre del cliente que más productos ha pedido
  411.  
  412. select first_name, sum(quantity) cuenta from customers
  413. join orders on customer_id=customers.id
  414. join order_details on orders.id=order_id
  415. group by customers.id having cuenta =
  416. (select sum(quantity) cuenta from customers
  417. join orders on customer_id=customers.id
  418. join order_details on orders.id=order_id
  419. group by customers.id order by cuenta desc limit 1);
  420.  
  421. 3.-Nombre de los productos que han sido suministrados por más de un proveedor
  422.  
  423. select product_name,count(DISTINCT supplier_id) from products
  424. join purchase_order_details on product_id=products.id
  425. join purchase_orders on purchase_order_id=purchase_orders.id
  426. join suppliers on supplier_id=suppliers.id
  427. GROUP BY products.id having count(DISTINCT supplier_id)>1 ;
  428.  
  429. 4.- El producto que más veces se ha encargado
  430.  
  431. SELECT product_name, SUM(quantity) total FROM products JOIN order_details ON products.id=product_id GROUP BY product_id
  432. having total=(SELECT SUM(quantity) total FROM products JOIN order_details ON products.id=product_id GROUP BY product_id
  433. ORDER BY total DESC LIMIT 1);
  434.  
  435. 5.-Numero de clientes que han sido atendidos por cada empleado
  436. select employees.first_name,count(distinct customers.id) total from orders join customers on customers.id=orders.customer_id join employees on employees.id=orders.employee_id group by employee_id;
  437.  
  438. SELECT
  439. concat(
  440. employees.first_name,
  441. " ",
  442. employees.last_name
  443. ) nombre,
  444. count(DISTINCT customer_id) num_clientes
  445. FROM
  446. employees
  447. LEFT JOIN orders ON employees.id = orders.employee_id
  448. GROUP BY
  449. employee_id
  450. ORDER BY
  451. num_clientes DESC
  452.  
  453. 6.-Numero de privilegios de cada empleado
  454.  
  455. SELECT first_name, COUNT(privilege_id) FROM employees LEFT JOIN employee_privileges ON id=employee_id
  456. GROUP BY employees.id
  457.  
  458. 7.-Nombre de los clientes que tienen algún encargo con el precio de envío superior a la media
  459.  
  460. SELECT distinct first_name,last_name FROM customers c JOIN orders o ON c.id=o.customer_id
  461. WHERE shipping_fee > (SELECT AVG(shipping_fee) FROM orders);
  462.  
  463. 8.- Nombre de los clientes que tienen algún encargo en el que el tiempo que ha pasado desde que lo pidieron hasta que se envió fue inferior a la media (no cuentan lo no enviados ni los que se pidieron y enviaron el mismo día).
  464.  
  465. SELECT DISTINCT first_name, last_name FROM orders JOIN customers ON orders.customer_id=customers.id
  466. WHERE shipped_date <> order_date AND DATEDIFF(shipped_date,order_date) <
  467. (SELECT AVG(DATEDIFF(shipped_date,order_date)) dias FROM orders WHERE shipped_date <> order_date);
  468.  
  469. 9.- LIstado de los clientes que no tienen ningún encargo pendiente de ser enviado
  470.  
  471. SELECT
  472. first_name,
  473. last_name
  474. FROM
  475. customers
  476. WHERE
  477. id NOT IN (
  478. SELECT DISTINCT
  479. customer_id
  480. FROM
  481. orders
  482. WHERE
  483. shipped_date IS NULL
  484. )
  485.  
  486. 10.-Todos los clientes que nunca han comprado chocolate
  487.  
  488. select DISTINCT FIRST_name, last_name from customers
  489. where customers.id not in
  490. (select customer_id from orders
  491. join order_details on orders.id=order_id
  492. join products on products.id=product_id
  493. where product_name like "%chocolate%");
  494.  
  495. 11.-Nombre de todos los clientes que han comprado algún producto suministrado (proveedor) por "Naoki" "Sato" y enviado por la empresa "Shipping Company A"
  496.  
  497. SELECT distinct c.first_name,c.last_name, shippers.company FROM customers c
  498. JOIN orders ON c.id=orders.customer_id
  499. JOIN shippers on shipper_id=shippers.id
  500. JOIN order_details ON orders.id=order_details.order_id
  501. JOIN products ON order_details.product_id=products.id
  502. JOIN purchase_order_details on products.id=purchase_order_details.product_id
  503. JOIN purchase_orders ON purchase_order_details.purchase_order_id=purchase_orders.id
  504. JOIN suppliers ON purchase_orders.supplier_id=suppliers.id
  505. WHERE suppliers.first_name LIKE "Naoki" AND suppliers.last_name LIKE "Sato" and shippers.company="Shipping Company A"
  506. ORDER BY c.first_name;
  507.  
  508. 12.- listado delos proveedores junto con las categorías de los productos que suministra y el total de productos de cada categoría
  509.  
  510. select company, category, count(*) total from suppliers
  511. join purchase_orders on supplier_id=suppliers.id
  512. join purchase_order_details on purchase_orders.id=purchase_order_id
  513. join products on product_id=products.id
  514. GROUP BY supplier_id, category order by total desc;
  515.  
  516. 13.- de la consulta anterior mostrar solo las compañias me más productos suministran de cada categoría
  517.  
  518. SELECT
  519. suppliers.company,
  520. products.category AS cat,
  521. count(*) total
  522. FROM
  523. suppliers
  524. JOIN purchase_orders ON supplier_id = suppliers.id
  525. JOIN purchase_order_details ON purchase_order_id = purchase_orders.id
  526. JOIN products ON product_id = products.id
  527. GROUP BY
  528. suppliers.id,
  529. products.category
  530. HAVING
  531. (total, cat) = (
  532. SELECT
  533. count(*), category
  534. FROM
  535. suppliers AS t1
  536. JOIN purchase_orders AS t2 ON t2.supplier_id = t1.id
  537. JOIN purchase_order_details AS t3 ON t3.purchase_order_id = t2.id
  538. JOIN products AS t4 ON t3.product_id = t4.id
  539. WHERE
  540. t4.category = cat
  541. GROUP BY
  542. t1.id
  543. ORDER BY
  544. count(*) DESC
  545. LIMIT 1
  546. )
  547.  
  548.  
  549. 14 .- Los clientes junto con los productos que han pedido el mismo producto en varias ocasiones.
  550.  
  551. select first_name, last_name,product_name, count(*) cuenta from customers
  552. join orders on customers.id=orders.customer_id
  553. join order_details on orders.id=order_details.order_id
  554. join products on products.id=order_details.product_id
  555. group by customer_id, product_id
  556. having cuenta>1
  557.  
  558. 15.- listado de todas las fechas de los pedidos junto con el nombre de la compañía de transporte y el núermo de facturas emitidas de cada pedido
  559.  
  560. SELECT
  561. order_date,
  562. shippers.company,
  563. count(invoices.id)
  564. FROM
  565. orders
  566. left JOIN shippers ON orders.shipper_id = shippers.id
  567. left join invoices on invoices.order_id=orders.id
  568. GROUp by orders.id
  569.  
  570. 16.- Crear una factura para cada pedido enviado que no tenga ya una factura
  571.  
  572. insert into invoices (order_id, invoice_date) select orders.id, NOW() from orders where order_date is not null and orders.id not in (select order_id from invoices);
  573.  
  574.  
  575.  
  576.  
  577. ------------------------------------------------------- SOBRE WORLD -----------------------------------------------------------------------
  578.  
  579. world.SQL
  580. ···crear una tabla Continent
  581. ···rellenar con los distintos continentes
  582. ···crear una columna en country llamada continent_id
  583. ···actualizar esta columna con el id correspondiente
  584. ···crear la relacion entre la columna y continente
  585.  
  586.  
  587. CREATE TABLE continent (
  588. continent_id int(11) unsigned NOT NULL AUTO_INCREMENT,
  589. continent varchar(100) NOT NULL,
  590. PRIMARY KEY (continent_id)
  591. );
  592.  
  593. insert into continent (continent) select distinct continent from country;
  594.  
  595. ALTER TABLE country
  596. ADD COLUMN continent_id int(11) UNSIGNED;
  597.  
  598. update country c set continent_id=(select continent_id from continent where c.continent=continent);
  599.  
  600. ALTER TABLE country
  601. MODIFY COLUMN `continent_id` int(11) UNSIGNED NOT NULL;
  602. ADD FOREIGN KEY (continent_id) REFERENCES continent (continent_id) ON DELETE RESTRICT ON UPDATE CASCADE;
  603.  
  604. ALTER TABLE country
  605. DROP COLUMN Continent;
  606.  
  607.  
  608. 1.-Qué idiomas que se hablan en EEUU ordenados por el numero de hablantes
  609.  
  610. SELECT language, percentage FROM country JOIN countrylanguage ON countryCode=code
  611. WHERE name LIKE "United States" order by percentage DESC;
  612.  
  613. 2.- Superficie de cada país y número de ciudades
  614.  
  615. SELECT country.name, surfacearea, COUNT(*) Cities FROM country JOIN city ON countrycode=code
  616. GROUP BY code ORDER BY Cities DESC;
  617.  
  618.  
  619. 3.- Edad media de los países donde el español es lengua oficial
  620.  
  621. SELECT AVG(lifeexpectancy) FROM country JOIN countrylanguage ON code=countrycode
  622. WHERE isofficial='T' AND language='Spanish'
  623.  
  624. 4.- Cuantas ciudades tienen españa?
  625.  
  626. SELECT count(*) total from city
  627. join country on city.CountryCode = country.`Code`
  628. where country.`Name` like "Spain"
  629.  
  630. 5.- Listado Paises que tiene como lengua oficial el inglés
  631.  
  632. SELECT country.name FROM country JOIN countrylanguage ON country.code=countrylanguage.CountryCode
  633. WHERE countrylanguage.language LIKE 'english' AND isofficial='T';
  634.  
  635. 6.- Número de habitantes de cada país que no pertenecen a ninguna ciudad.
  636. SELECT
  637. SUM(country.Population)-(city.Population) as habitantes , country.name
  638. FROM
  639. country
  640. JOIN city ON country.code=city.CountryCode
  641. group by country.code
  642.  
  643. 7.- Número de distritos de cada país
  644.  
  645. select count(distinct district) total,country.name
  646. from country
  647. join city on CountryCode=country.Code
  648. group by country.Code
  649. order by total desc ;
  650.  
  651. 8.- País y distrito que mas ciudades tiene
  652.  
  653. SELECT c.name, ci.district, count(*) total FROM country c JOIN city ci ON c.code=ci.CountryCode
  654. GROUP BY c.code, ci.District having total = (select count(*) total FROM country c JOIN city ci ON c.code=ci.CountryCode
  655. GROUP BY c.code, ci.District order by total desc limit 1);
  656.  
  657. SELECT c.name, ci.district, count(*) total FROM country c JOIN city ci ON c.code=ci.CountryCode
  658. GROUP BY c.code, ci.District having total >= ALL(select count(*) total FROM country c JOIN city ci ON c.code=ci.CountryCode
  659. GROUP BY c.code, ci.District);
  660.  
  661. 9.- nombre de la capital de cada país
  662.  
  663. SELECT c.name Pais,ci.name capital FROM country c LEFT JOIN city ci on c.capital=ci.id
  664.  
  665. SELECT country.`Name` Pais, city.`Name` from country
  666. join city on country.`Code` = city.CountryCode
  667. group by Capital
  668.  
  669. SELECT
  670. city. NAME,
  671. country.`Name`
  672. FROM
  673. country
  674. JOIN city ON country. CODE = city.CountryCode
  675. WHERE
  676. city.id LIKE Capital
  677.  
  678. Select city.Name,country.Name from country join city on CountryCode=country.Code where capital=city.ID;
  679.  
  680. 10.- Nombre de los paises junto con la población de su capital si la tienen, si no la tienen que salga null.
  681. SELECT
  682. country.name,
  683. city.Population
  684. FROM
  685. country
  686. left JOIN city ON country.Capital = city.id
  687.  
  688. 11.- Nombre de la capital del país mas grande
  689.  
  690. SELECT c.name pais,ci.name capital, surfacearea FROM city ci JOIN country c ON c.capital=ci.ID where SurfaceArea=(select max(SurfaceArea) from country);
  691.  
  692. 12.- Nombre de los paises con dos idiomas oficiales
  693.  
  694. SELECT c.name pais, count(*) idiomas FROM country c JOIN countrylanguage cl ON
  695. c.code=cl.countrycode WHERE isofficial="T" GROUP BY c.code HAVING idiomas = 2 ORDER BY idiomas DESC;
  696.  
  697. 13.- El continente que tiene más paises con esperanza de vida por debajo de la media
  698.  
  699. SELECT continent, count(*) FROM continent JOIN country USING (continent_id)
  700. WHERE lifeexpectancy < (SELECT AVG(lifeexpectancy) FROM country) GROUP BY continent_id
  701. ORDER BY 2 DESC LIMIT 1;
  702.  
  703. 14.- Nombre de los paises cuya capital no es la ciudad mas poblada de su país
  704.  
  705. SELECT distinct c.name, ct.Population FROM country c JOIN city ci ON c.code=ci.countrycode JOIN city ct ON ct.id=c.capital
  706. WHERE ci.population > ct.population;
  707.  
  708. 15.- mostrar tambien el nombre de la capital junto con su población y el monbre de la ciudad mas poblada junto con su poblacion
  709.  
  710. SELECT
  711. ct.NAME pais,
  712. capital.NAME capital,
  713. capital.population poblacion_capital,
  714. cit.NAME ciudad,
  715. cit.population poblacion_ciudad
  716. FROM
  717. country AS ct
  718. JOIN city AS capital ON ct.capital = capital.id
  719. JOIN city AS cit ON ct.CODE = cit.CountryCode
  720. WHERE
  721. cit.population = (
  722. SELECT
  723. max(population)
  724. FROM
  725. city
  726. WHERE
  727. CountryCode = ct.CODE
  728. )
  729. AND cit.Population > capital.Population
  730. ORDER BY
  731. pais
  732.  
  733. 16.- El idioma que está presente en mas paises.
  734.  
  735. SELECT language, count(*) total FROM countrylanguage GROUP BY language
  736. having total=(SELECT count(*) total FROM countrylanguage GROUP BY language ORDER BY total DESC limit 1);
  737.  
  738. 17.- El idioma que se habla en mas continentes
  739.  
  740. Select language, count(distinct continent_id) total from countrylanguage join country on code=CountryCode GROUP BY Language having total =
  741. (Select count(distinct continent_id) total from countrylanguage join country on code=CountryCode GROUP BY Language order by total desc limit 1)
  742.  
  743. 18-. Número total de personas que hablan cada idioma.
  744.  
  745. select Language, truncate(sum((Percentage * country.Population)/100),0) as personas_hablan_pais from CountryLanguage join country on CountryCode=Country.Code group by Language order by personas_hablan_pais desc;
  746.  
  747. 19.- Número de idiomas que se hablan en cada continente
  748.  
  749. SELECT continent, count(distinct language) idiomes
  750. FROM continent JOIN country using (continent_id) left JOIN countrylanguage ON code=CountryCode
  751. GROUP BY continent ORDER BY idiomes DESC;
  752.  
  753. 20.- Listado de continentes donde no se habla "spanish
  754.  
  755. SELECT * FROM continent WHERE continent_id NOT IN (
  756. SELECT DISTINCT continent_id FROM continent JOIN country USING(continent_id) JOIN countrylanguage
  757. ON code=CountryCode WHERE language = "spanish")
  758.  
  759. 21.- listado de paises que tienen mas de 10 ciudades con una población de mas de 10000 habitantes
  760. SELECT
  761. country. NAME, count(*) total
  762. FROM
  763. country
  764. JOIN city ON CODE = CountryCode
  765. where city.Population>10000
  766.  
  767. group by CountryCode
  768. having total>10
  769.  
  770. 22.- nombre de las ciudades españolas con mas de 10000 habitantes
  771.  
  772. select Name FROM city where CountryCode like "ESP" and Population>10000
  773.  
  774. 23.- Igual que la 21 pero la capital ha de tener más de 1 millón de habitantes
  775.  
  776. SELECT co.name, count(*) FROM country co JOIN city ci on co.code=ci.countrycode
  777. JOIN city cap ON cap.ID=co.capital WHERE ci.population>10000 AND cap.population>1000000
  778. GROUP BY co.code HAVING COUNT(*)>10;
  779.  
  780. 24.- igual que la 23 pero solo necesito saber cuantos hay
  781.  
  782. SELECT count(*) from (
  783. SELECT co.name, count(*) FROM country co JOIN city ci on co.code=ci.countrycode
  784. JOIN city cap ON cap.ID=co.capital WHERE ci.population>10000 AND cap.population>1000000
  785. GROUP BY co.code HAVING COUNT(*)>10;
  786. )c;
  787.  
  788. 25.- Listado de paises que están bajo el dominio de reino unido
  789.  
  790. select country.name from country where HeadOfState like (select HeadOfState FROM country where country.name like "united kingdom")
  791.  
  792. 26.- listado de los continentes junto a la región que más población tiene
  793. opcion1
  794. SELECT continent,region FROM (select continent, region , sum(population)suma, continent_id from country join continent using (continent_id) GROUP BY region order by 4,3 desc)c
  795. WHERE suma = (SELECT max(suma)) GROUP BY Continent;
  796. opcion2
  797. select continent, region, sum(population) total, continent_id b from country c join continent using (continent_id) GROUP BY region
  798. having total=(select sum(population) from country join continent using (continent_id) where continent_id=c.continent_id GROUP BY region order by 1 desc limit 1) order by 4,3 desc
  799. opcion3
  800. select a1, a2 from (select continent a1, region a2 , sum(population) a3, continent_id a4 from country join continent using (continent_id) GROUP BY region) a
  801. where a3=(select sum(population) from country where a4=continent_id GROUP BY region ORDER BY 1 desc limit 1);
  802.  
  803. 27.- Listado de los paises que tengan algún idioma oficial que se hable menos que otro idioma no oficial
  804.  
  805. select distinct name from country c join countrylanguage on code=countrycode
  806. where Isofficial="T" and Percentage < (select max(Percentage) from countrylanguage where CountryCode=c.code and IsOfficial!="T") order by name ;
  807.  
  808. 28.- nombre de los paises con mas y menos densidad de población (no cuentan los que tienen población 0)
  809.  
  810.  
  811. SELECT
  812. c1. NAME mayor_pais,
  813. c1.a mayor_densidad,
  814. c2. NAME menos_pais,
  815. c2.a menor_densidad
  816. FROM
  817. (
  818. SELECT
  819. NAME,
  820. (population / SurfaceArea) a
  821. FROM
  822. country
  823. WHERE
  824. population > 0
  825. ORDER BY
  826. a DESC
  827. LIMIT 1
  828. ) c1,
  829. (
  830. SELECT
  831. NAME,
  832. (population / SurfaceArea) a
  833. FROM
  834. country
  835. WHERE
  836. population > 0
  837. ORDER BY
  838. a ASC
  839. LIMIT 1 gege
  840. ) c2
  841.  
  842. SELECT
  843. c. NAME,
  844. (c.population / c.SurfaceArea) d1,
  845. c2. NAME,
  846. (c2.population / c2.SurfaceArea) d2
  847. FROM
  848. country c,
  849. country c2
  850. having
  851. d1 = (
  852. SELECT
  853. (population / SurfaceArea) a
  854. FROM
  855. country
  856. WHERE
  857. population > 0
  858. ORDER BY
  859. a DESC
  860. LIMIT 1
  861. )
  862. AND d2 = (
  863. SELECT
  864. (population / SurfaceArea) a
  865. FROM
  866. country
  867. WHERE
  868. population > 0
  869. ORDER BY
  870. a ASC
  871. LIMIT 1
  872. )
  873.  
  874. select c.name mas, c.Population/c.SurfaceArea densidad, c2.name menos, c2.Population/c2.SurfaceArea densidad2 from country c, country c2
  875. where (c.Population/c.SurfaceArea, c2.Population/c2.SurfaceArea)=( select max(Population/SurfaceArea), min(Population/SurfaceArea) d from country where Population!=0) ;
  876.  
  877.  
  878.  
  879. ------------------------------------------------ SOBRE EMPLOYEES ----------------------------------------------------------
  880.  
  881.  
  882. 1.- Nombre de las distintas categorías profesionales
  883.  
  884. select DISTINCT title from titles;
  885.  
  886. 2.- El departamento que ha tenido más jefes en su historia
  887.  
  888. SELECT
  889. dept_name, SUM(salary) st FROM salaries
  890. JOIN dept_emp USING (emp_no) JOIN departments USING (dept_no) WHERE NOW() BETWEEN salaries.from_date
  891. AND salaries.to_date AND NOW() BETWEEN dept_emp.from_date AND dept_emp.to_date GROUP BY dept_no order by 2;
  892.  
  893. 3.- Nombre de todos los empleados con la fecha de inicio y la fecha final del último departamento en el que ha trabajado (ya no trabaja)
  894.  
  895. SELECT first_name,last_name,MAX(from_date) desde ,MAX(to_date) hasta
  896. FROM employees JOIN dept_emp USING(emp_no) GROUP BY emp_no having hasta < now();
  897.  
  898. 4.- Nombre y apellidos de los trabajadores que los despidieron despúes de estar un día en el departamento
  899.  
  900. SELECT
  901. first_name,
  902. last_name
  903. FROM
  904. employees
  905. JOIN dept_emp USING (emp_no)
  906. GROUP BY
  907. emp_no
  908. HAVING
  909. DATEDIFF(
  910. max(to_date),
  911. max(from_date)
  912. ) = 1;
  913.  
  914. 5.- Incrementar el sueldo en 1000€ al director del departamento que mas cobra;
  915.  
  916.  
  917.  
  918. SELECT emp_no e, max(salary)FROM dept_manager dm JOIN salaries s USING(emp_no) WHERE NOW() BETWEEN s.from_date
  919. AND s.to_date AND NOW() BETWEEN dm.from_date AND dm.to_date
  920.  
  921.  
  922. select salary from dept_manager join employees using (emp_no) join salaries USING (emp_no) where NOW() BETWEEN salaries.from_date
  923. AND salaries.to_date AND NOW() BETWEEN dept_manager.from_date AND dept_manager.to_date order by salary desc limit 1
  924.  
  925.  
  926. update salaries set to_date=now() where to_date>NOW() and emp_no=
  927. (select e from (SELECT emp_no e, max(salary)FROM dept_manager dm JOIN salaries s USING(emp_no) WHERE NOW() BETWEEN s.from_date
  928. AND s.to_date AND NOW() BETWEEN dm.from_date AND dm.to_date) a );
  929.  
  930. insert into salaries (emp_no, salary, to_date, from_date)
  931. SELECT emp_no, MAX(salary)+1000, "9999-01-01", DATE_ADD(now(),INTERVAL 1 day) FROM dept_manager dm JOIN salaries s USING(emp_no) WHERE NOW() BETWEEN s.from_date
  932. AND s.to_date AND NOW() BETWEEN dm.from_date AND dm.to_date
  933.  
  934. 6.- Todos los trabajadores que han estado en mas de un departamento
  935.  
  936. SELECT first_name Nombre ,last_name Apellidos , COUNT(DISTINCT dept_no) total
  937. FROM employees JOIN dept_emp USING(emp_no) GROUP BY emp_no HAVING total > 1;
  938.  
  939.  
  940. 7.- listado de nombres de empleados junto con el número de empleados que se llaman igual
  941.  
  942. select first_name, count(*) from employees GROUP BY first_name order by 2 desc ;
  943.  
  944.  
  945. 8.- puesto de trabajo que tiene el salario medio mas alto actual;
  946.  
  947. select title, avg(salary) media from titles join salaries using (emp_no) where now() between salaries.from_date and salaries.to_date group by title having media = (select avg(salary) media from titles join salaries using (emp_no) where now() between salaries.from_date and salaries.to_date group by title order by media desc limit 1);
  948.  
  949. 9.- la media de cada puesto de trabajo pero por sexo
  950.  
  951. select title, gender, avg(salary) media from titles join employees using (emp_no) join salaries s using (emp_no)
  952. where now() BETWEEN s.from_date and s.to_date GROUP BY title, gender order by 1,2 desc;
  953.  
  954. 10.- de la anterior que salga solo el sexo que mas cobra
  955.  
  956. select title t, gender, avg(salary) media from titles join employees using (emp_no) join salaries s using (emp_no)
  957. where now() BETWEEN s.from_date and s.to_date GROUP BY title, gender having (title,media) = (select title, avg(salary) media from titles join employees using (emp_no) join salaries s using (emp_no)
  958. where now() BETWEEN s.from_date and s.to_date and title=t GROUP BY title, gender order by 2 desc limit 1 ) order by 1,2 desc;
  959.  
  960. 11.- la persona que cobra mas de cada departamento.
  961.  
  962. SELECT dept_no , dept_name, first_name, last_name, salary FROM departments d
  963. JOIN dept_emp de USING(dept_no) JOIN employees USING(emp_no) JOIN salaries s USING(emp_no)
  964. WHERE NOW() BETWEEN de.from_date AND de.to_date AND NOW() BETWEEN s.from_date AND s.to_date
  965. AND (dept_no, salary) in (
  966. SELECT
  967. dept_no,
  968. max(salary)
  969. FROM
  970. (
  971. SELECT
  972. dept_no,
  973. salary
  974. FROM
  975. dept_emp de
  976. JOIN salaries s USING (emp_no)
  977. WHERE
  978. NOW() BETWEEN de.from_date
  979. AND de.to_date
  980. AND NOW() BETWEEN s.from_date
  981. AND s.to_date
  982. ) a
  983. GROUP BY
  984. dept_no);
  985.  
  986. 12.- el nombre del trabajador mas joven en el momento de la contratación y que sigue trabajando.
  987.  
  988. select first_name, last_name, datediff(hire_date,birth_date) dias from employees join dept_emp using (emp_no)
  989. where NOW() BETWEEN from_date AND to_date having dias=(select datediff(hire_date,birth_date) from employees join dept_emp using (emp_no)
  990. where NOW() BETWEEN from_date AND to_date order by 1 limit 1);
  991.  
  992. 13.- nombre, apellidos y edad actual (en años) del trabajador que mas años lleva en la empresa
  993.  
  994. SELECT
  995. first_name,
  996. last_name,
  997. TIMESTAMPDIFF(YEAR, birth_date, now()),
  998. datediff(now(), hire_date) dt
  999. FROM
  1000. employees
  1001. HAVING dt=(select datediff(now(),hire_date) diastrabajados from employees order by diastrabajados desc limit 1)
  1002.  
  1003. SELECT first_name, last_name, TIMESTAMPDIFF(YEAR,birth_date,now()) edad FROM employees JOIN dept_emp s USING (emp_no)
  1004. WHERE NOW() BETWEEN s.from_date AND s.to_date AND hire_date =
  1005. (SELECT MIN(hire_date) FROM employees JOIN dept_emp USING (emp_no) where NOW() BETWEEN from_date AND to_date);
  1006.  
  1007. 14.-Número de personas que trabajan por cada departamento y puesto de trabajo
  1008.  
  1009. select dept_name, title, count(*) from departments join dept_emp de using (dept_no) join employees using (emp_no) join titles t using (emp_no)
  1010. where NOW() BETWEEN de.from_date AND de.to_date and NOW() BETWEEN t.from_date AND t.to_date
  1011. GROUP BY dept_no, title;
  1012.  
  1013. 15.- Nombre y apellidos de los empleados que han sido jefes y ahora no lo son
  1014.  
  1015. select first_name, last_name from employees join dept_emp USING (emp_no) where NOW() BETWEEN from_date AND to_date and emp_no not in
  1016. (select emp_no from dept_manager where NOW() BETWEEN from_date AND to_date) and emp_no in (select emp_no from dept_manager);
  1017. a
  1018. 16.- Número de trabajadores por departamento que actualmente cobran menos que en algún otro momento
  1019.  
  1020. select dept_name, count(distinct emp_no) from employees e join salaries s USING (emp_no) join dept_emp de using (emp_no) join departments using (dept_no)
  1021. where NOW() BETWEEN s.from_date AND s.to_date and NOW() BETWEEN de.from_date AND de.to_date and salary <
  1022. (select max(salary) from salaries where emp_no=e.emp_no) GROUP BY dept_no
  1023.  
  1024. 17.- El puesto que en el que se está menos meses de media
  1025.  
  1026. select title,AVG(datediff(to_date,from_date)) as media from titles group by title order by media asc limit 1 ;
  1027.  
  1028. 18.- Realizar la consulta número 10 usando vistas;
  1029.  
  1030. create view vista1 as SELECT title, gender, avg(salary) salario FROM titles
  1031. JOIN employees USING (emp_no)
  1032. JOIN salaries USING (emp_no)
  1033. WHERE now() BETWEEN salaries.from_date AND salaries.to_date
  1034. GROUP BY title, gender;
  1035.  
  1036. select title , gender, salario from vista1 v where salario=(select max(salario) from vista1 where title=v.title GROUP BY title)
  1037.  
  1038.  
  1039.  
  1040.  
  1041. ------------------------------------------------------- VISTAS ------------------------------------------------------
  1042.  
  1043. CREATE VIEW paises AS
  1044. SELECT co.NAME pais, COUNT(*) ciudades, cap.name capital, cap.population poblacion
  1045. FROM country co JOIN city ci ON co.CODE = ci.countrycode JOIN city cap ON cap.ID = co.capital
  1046. WHERE ci.population > 10000 AND cap.population > 1000000 GROUP BY co.CODE HAVING COUNT(*) > 10;
  1047.  
  1048.  
  1049. select count(*) from paises;
  1050.  
  1051. select pais from paises where ciudades > 100;
  1052.  
  1053.  
  1054. --------------------------------------------------------- NEPTUNO ------------------------------------------------------
  1055.  
  1056. 1.-Listado de los empleados con el importe total de las ventas que han facturado
  1057.  
  1058. TRUNCATE->limita los decimales
  1059. USO -> TRUNCATE(valor,num_decimales)
  1060.  
  1061. CREATE VIEW Tcargos AS (
  1062. SELECT idempleado, TRUNCATE(SUM(pedido.cargo),2) TotalCargado FROM empleado e JOIN pedido USING(idEmpleado)
  1063. GROUP BY idempleado);
  1064.  
  1065. CREATE or replace VIEW Tproductos AS (
  1066. SELECT idempleado, TRUNCATE(SUM((precioUnidad*cantidad)-descuento),2) TotalFacturado
  1067. FROM empleado e JOIN pedido USING(idEmpleado) JOIN detalles_de_pedido USING(idpedido)
  1068. GROUP BY idempleado);
  1069.  
  1070. SELECT e.nombre,e.apellidos empleado, totalfacturado+TotalCargado total
  1071. FROM empleado e JOIN Tcargos USING(IdEmpleado) JOIN Tproductos USING(IdEmpleado)order by total desc;
  1072.  
  1073.  
  1074. --- otra forma ----
  1075.  
  1076. CREATE or replace VIEW Tproductos AS (
  1077. SELECT idempleado, TRUNCATE(SUM((precioUnidad*cantidad)-descuento),2) TotalFacturado
  1078. FROM empleado e JOIN pedido USING(idEmpleado) JOIN detalles_de_pedido USING(idpedido)
  1079. GROUP BY idempleado);
  1080.  
  1081. SELECT e.nombre,e.apellidos empleado, TRUNCATE(SUM(pedido.cargo),2)+totalfacturado total
  1082. FROM empleado e join pedido using (IdEmpleado) JOIN Tproductos USING(IdEmpleado)group by IdEmpleado order by total desc;
  1083.  
  1084.  
  1085. 2.- El nombre del proveedor que suministra el producto mas vendido
  1086.  
  1087. SELECT NombreProducto, nombreEmpresa, SUM(cantidad) FROM detalles_de_pedido
  1088. JOIN producto USING(idProducto) JOIN proveedor USING(idProveedor) GROUP BY idProducto HAVING SUM(cantidad) =
  1089. (SELECT MAX(total) FROM (SELECT SUM(Cantidad) total FROM detalles_de_pedido GROUP BY idProducto) a);
  1090.  
  1091.  
  1092. SELECT NombreProducto, nombreEmpresa, SUM(cantidad) FROM detalles_de_pedido
  1093. JOIN producto USING(idProducto) JOIN proveedor USING(idProveedor) GROUP BY idProducto HAVING SUM(cantidad) =
  1094. (SELECT SUM(Cantidad) total FROM detalles_de_pedido GROUP BY idProducto order by 1 desc limit 1);
  1095.  
  1096. select nombreempresa, NombreProducto, sum(Cantidad)suma from proveedor
  1097. join producto using(IdProveedor)
  1098. join detalles_de_pedido using (IdProducto)
  1099. group by IdProveedor, IdProducto
  1100. having suma=(select sum(cantidad)suma from proveedor
  1101. join producto using(IdProveedor)
  1102. join detalles_de_pedido using (IdProducto)
  1103. group by IdProveedor, IdProducto
  1104. order by suma desc limit 1)
  1105.  
  1106. 3.- Para cada categoria mostrar el número de productos y el número de proveedores
  1107.  
  1108. SELECT
  1109. nombreCategoria,
  1110. count(idProducto),
  1111. count(DISTINCT idProveedor)
  1112. FROM
  1113. categoria
  1114. JOIN producto USING (idcategoria)
  1115. GROUP BY
  1116. IdCategoria
  1117.  
  1118. 4.- El nombre y apellido de todos los jefes
  1119.  
  1120. select distinct j.nombre, j.apellidos from empleado e join empleado j on e.jefe=j.idEmpleado;
  1121.  
  1122. SELECT nombre, apellidos
  1123. FROM empleado e WHERE idempleado IN (SELECT DISTINCT jefe FROM empleado);
  1124.  
  1125. 5.- la media de pedidos que han realizado cada uno los empleados que no son jefes
  1126.  
  1127. select avg(total) from(SELECT IdEmpleado,COUNT(*) total FROM pedido WHERE IdEmpleado
  1128. not in( SELECT DISTINCT jefe FROM empleado where jefe is not null ) group by IdEmpleado)sa
  1129.  
  1130. 6.- nombre de la ciudad del empleado que hizó un pedido a un cliente de la misma ciudad y que pidió un producto cuyo proveedor tambien es de la misma ciudad
  1131.  
  1132. SELECT DISTINCT
  1133. empleado.Ciudad
  1134. FROM
  1135. empleado
  1136. JOIN pedido USING (IdEmpleado)
  1137. JOIN cliente USING (IdCliente)
  1138. JOIN detalles_de_pedido USING (IdPedido)
  1139. JOIN producto USING (IdProducto)
  1140. JOIN proveedor USING (IdProveedor)
  1141. WHERE
  1142. empleado.Ciudad LIKE cliente.Ciudad
  1143. AND empleado.Ciudad LIKE proveedor.Ciudad
  1144.  
  1145. 7.- El empleado que mas rápido despacha los pedidos
  1146.  
  1147. create or repalce view lista as select IdEmpleado, nombre, apellidos, DATEDIFF(pedido.fechaenvio,pedido.fechapedido)tiempo from empleado
  1148. join pedido using (IdEmpleado)
  1149.  
  1150. select nombre, apellidos, avg(tiempo)tiempo2 from lista
  1151. group by IdEmpleado order by tiempo2 asc limit 1;
  1152.  
  1153. select nombre, avg(DATEDIFF(fechaenvio, fechapedido)) dias from pedido join empleado using (IdEmpleado) GROUP BY IdEmpleado order by dias limit 1;
  1154.  
  1155. 8.- El nombre del cliente cuyo pedido tiene productos de mas categorías distintas
  1156.  
  1157. select nombrecontacto, count(distinct idcategoria) total from producto join detalles_de_pedido using (IdProducto) join pedido using (IdPedido) join cliente using (idcliente) GROUP BY IdPedido
  1158. having total = (select count(distinct idcategoria) from producto join detalles_de_pedido using (IdProducto) join pedido using (IdPedido) join cliente using (idcliente) GROUP BY IdPedido order by 1 desc limit 1);
  1159.  
  1160. 9.- los productos que han sido pedidos mas del 50% de las veces por el mismo cliente
  1161.  
  1162. select c.nombrecontacto, nombreproducto, count(idproducto) cuenta, (select count(*) from pedido where idcliente=c.idcliente) total from cliente c join pedido using (IdCliente) join detalles_de_pedido using (IdPedido) join producto using (IdProducto)
  1163. GROUP BY idcliente, IdProducto having cuenta>=(total/2)
  1164.  
  1165. select c.nombrecontacto, nombreproducto, count(idproducto) total from cliente c join pedido using (IdCliente) join detalles_de_pedido using (IdPedido) join producto using (IdProducto)
  1166. GROUP BY idcliente, IdProducto having total>=(select count(*)/2 from pedido where idcliente = c.idcliente);
  1167.  
  1168. ---------------------------------------------------- SOBRE FOOTBALL -------------------------------------------------------------------
  1169.  
  1170. 1.-Listado de jugadores que han estado en mas de un club
  1171.  
  1172. select player_name,count(distinct club_id) clubes from player join playerclub using(player_id) group by player_id having clubes >= 2
  1173.  
  1174. 2.- De cada equipo el jugador que lleva mas tiempo
  1175.  
  1176. select club_name, player_name, start_date from player join playerclub using (player_id) join club c using (club_id)
  1177. where start_date = (select min(start_date) from playerclub where club_id=c.club_id);
  1178.  
  1179. 3.- para cada temporada y liga sacar la clasificación final
  1180.  
  1181. select season_year, league, club_name, ((home_win+away_win)*3)+home_draw+away_draw puntos from season join seasonclub using (season_id) join club using (club_id)
  1182. order by season_id, league, puntos desc ;
  1183.  
  1184. 4.- Para cada Jugador el número de partidos y el número de tarjetas (sin subconsultas)
  1185.  
  1186. select p.player_id,player_name, count(distinct pm.match_id) partidos, count(card_type) tarjetas from player p join playermatch pm on p.player_id=pm.player_id left join card c on p.player_id=c.player_id and pm.match_id=c.match_id
  1187. group by p.player_id order by partidos desc;
  1188.  
  1189. 5.- los partidos donde mas goles se metieron;
  1190.  
  1191. select c1.club_name local, c2.club_name visitante, season_year, home_score+away_score goles, home_score, away_score from club c1 join matches m on c1.club_id=m.home_id join club c2 on c2.club_id=m.away_id join season using(season_id)
  1192. having goles = (select max(home_score+away_score) from matches);
  1193.  
  1194. 6.- todos los jugadores españoles que no han metido ningún gol menos los porteros y defensas;
  1195.  
  1196. select player_name from player where country like "Spain" and position <> "Goalkeeper" and position <> "Defender"
  1197. and player_id not in (select player_id from goalscore);
  1198.  
  1199. select player_name from player left join goalscore using(player_id) where country like "Spain" and position <> "Goalkeeper" and position <> "Defender"
  1200. and goalscore.player_id is null;
  1201.  
  1202. 7.- listados de los ganadores de las distintas ligas y temporadas
  1203.  
  1204. select season_year, league, club_name, ((home_win+away_win)*3)+home_draw+away_draw puntos from season s join seasonclub sc using (season_id) join club c using (club_id)
  1205. where ((home_win+away_win)*3)+home_draw+away_draw =
  1206. (select max(((home_win+away_win)*3)+home_draw+away_draw) from season join seasonclub using (season_id) join club using (club_id)
  1207. where season_year=s.season_year and league=c.league);
  1208.  
  1209. 8.- pichichi absoluto de todas las ligas por temporada
  1210.  
  1211. select season_year, player_name, count(*) total from player join goalscore using (player_id) join matches using (match_id) join season s using (season_id)
  1212. group by season_id, player_id having total =
  1213. (select count(*) total from player join goalscore using (player_id) join matches using (match_id) join season s using (season_id) where season_id= s.season_id
  1214. group by player_id order by total desc limit 1);
  1215.  
  1216. 9.- numero de representados a lo largo de su historia por representante
  1217.  
  1218. select count(distinct player_id),manager_name from manager join managerplayer using (manager_id) group by manager_id;
  1219.  
  1220. 10.- Los partidos donde se empató en el último minuto
  1221.  
  1222. select distinct season_year, c1.club_name local , c2.club_name visitante, home_score goles_local, away_score goles_visitante from club c1 join matches on c1.club_id=home_id join club c2 on c2.club_id=away_id join goalscore using (match_id) join season using (season_id)
  1223. where home_score=away_score and goal_min=90
  1224.  
  1225. 11.- los partidos que se quedaron a un gol en el ultimo minuto
  1226.  
  1227. select distinct season_year, c1.club_name, c2.club_name, home_score, away_score from club c1 join matches on c1.club_id=home_id join club c2 on c2.club_id=away_id join goalscore using (match_id) join season using (season_id)
  1228. where (home_score+1=away_score or home_score=away_score+1) and goal_min=90;
  1229.  
  1230. 12.- los partidos que se metió algún gol despues de sacar tarjeta roja
  1231.  
  1232. select distinct season_year, c1.club_name, c2.club_name, home_score, away_score, card_min, goal_min from club c1 join matches on c1.club_id=home_id join club c2 on c2.club_id=away_id join card using (match_id) join season using (season_id) join goalscore using (match_id)
  1233. where card_type="red" and card_min<goal_min;
  1234.  
  1235. 13.- los partidos que no se metió ningún gol despues de sacar tarjeta amarilla
  1236.  
  1237. select distinct season_year, c1.club_name, c2.club_name, home_score, away_score from club c1 join matches m on c1.club_id=home_id join club c2 on c2.club_id=away_id join card using (match_id) join season using (season_id) join goalscore using (match_id)
  1238. where card_type="yellow" and card_min> (select max(goal_min) from goalscore where match_id=m.match_id);
  1239.  
  1240.  
  1241. ------------------------------------------ SOBRE RECURSOS HUMANOS --------------------------------------------------
  1242.  
  1243.  
  1244. 1.- Mostrar los jobs donde el salario mínimo es mayor que 10000
  1245.  
  1246. select * from jobs where min_salary > 10000;
  1247.  
  1248. 2.- Mostrar first_name y hire_date de los empleados que ingresaron entre 2002 y 2005
  1249.  
  1250. select first_name, hire_date from employees where year(hiredate) between 2002 and 2005;
  1251.  
  1252. 3.- Mostrar first_name y hire_Date de los empleados que son IT Programmer o Sales Man
  1253.  
  1254. select first_name, hire_date from employees join jobs using (job_id) where job_title in ("IT Programmer","Sales Man");
  1255.  
  1256. 4.- Mostrar empleados que ingresaron después del 1° de enero de 2008
  1257.  
  1258. select * employees WHERE hire_date>="2008-01-01"
  1259.  
  1260. 5.- Mostrar los detalles de los empleados con id 150 o 160
  1261.  
  1262. select * from employees WHERE employee_id in (150,160)
  1263.  
  1264. 6.- Mostrar first_name, salary, commission_pct y hire_date de los empleados con salario menor a 10000
  1265.  
  1266. select first_name,salary ,commission_pct, hire_date from employees where salary < 10000;
  1267.  
  1268. 7.- Mostrar job_title, la diferencia entre el salario mínimo y máximo para los jobs con max_salary en el rango de 10000 a 20000
  1269.  
  1270. select job_title,max_salary-min_salary from jobs WHERE max_salary BETWEEN 10000 and 20000
  1271.  
  1272. 8.- Mostrar first_name, salary y redondear el salario a millares de todos los empleados
  1273.  
  1274. select first_name, round(salary/1000)*1000 salario from employees;
  1275.  
  1276. select first_name, ROUND(salary,-3) from employees
  1277.  
  1278. 9.- Mostrar el nombre completo de los empleados cuyo first_name o last_name comiece con "S"
  1279.  
  1280. select first_name,last_name from employees where first_name like "S%" or last_name like "S%";
  1281.  
  1282. 10.- Mostrar los datos de los empleados que ingresaron durante el mes de mayo
  1283.  
  1284. SELECT * from employees where month(hire_date) = 5
  1285.  
  1286. 11.- Mostrar first_name, fecha de ingreso y el primer día del siguiente mes a la fecha de ingreso de los empleados
  1287.  
  1288. SELECT first_name, hire_date, date_add(LAST_DAY(hire_date),INTERVAL 1 day) from employees
  1289.  
  1290. 12.- Mostrar first_name y años de experiencia de los empleados
  1291.  
  1292. select first_name, TIMESTAMPDIFF(YEAR,hire_date,now()) from employees;
  1293.  
  1294. 13.- Mostrar first_name de los empleados que ingresaron durante el año 2001
  1295.  
  1296. SELECT first_name from employees where year(hire_date)=2001
  1297.  
  1298. 14.- Mostrar cuantos empleados por cada mes del año actual han ingresado a la compañia
  1299.  
  1300. select MONTH(hire_date) mes, count(*) empleados from employees where year(hire_date)=year(now()) GROUP BY mes;
  1301.  
  1302. 15.- Mostrar cuantos empleados tiene a su cargo cada manager
  1303.  
  1304. SELECT
  1305. manager.first_name,
  1306. manager.last_name,
  1307. count(*) total
  1308. FROM
  1309. employees
  1310. JOIN employees manager ON employees.manager_id = manager.employee_id
  1311. GROUP BY
  1312. manager.employee_id;
  1313.  
  1314.  
  1315. 16.- Mostrar el nombre y la fecha en que terminó su puesto anterior de cada empleado
  1316.  
  1317. SELECT first_name, MAX(END_DATE) FROM JOB_HISTORY join employee using (employee_id) GROUP BY EMPLOYEE_ID;
  1318.  
  1319. 17.- Mostrar la cantidad de empleados que ingresaron en un día de mes mayor a 15
  1320.  
  1321. select count(*) from employees where day(hire_date)>15
  1322.  
  1323. 18.- Mostrar para cada pais el número de ciudades.
  1324. SELECT
  1325. country_name,
  1326. count(distinct city)
  1327. FROM
  1328. locations
  1329. JOIN countries USING (country_id)
  1330. group by country_id
  1331.  
  1332. 19.- Mostrar el promedio de salario de los empleados por departamento que tengan asignado un porcentaje de comisión
  1333.  
  1334. select department_name,avg(salary) FROM employees join departments using (department_id) where commission_pct is not null GROUP BY department_id;
  1335.  
  1336. 20.- Mostrar los departamentos en los cuales no ha ingresado un empleado durante los últimos dos años
  1337.  
  1338. SELECT distinct department_id, department_name FROM DEPARTMENTS join employees using (department_id)
  1339. WHERE department_id not in (select department_id from employees where DATE_ADD(hire_date,INTERVAL 2 Year)>NOW());
  1340.  
  1341. 21.- Mostrar los detalles de los departamentos en los cuales el salario es mayor que 10000 para los empleados que no tuvieron un puesto previamente
  1342.  
  1343. SELECT distinct d.department_id, department_name FROM DEPARTMENTS d join employees using (department_id) LEFT JOIN job_history jh using (employee_id)
  1344. where salary>10000 and jh.employee_id is null;
  1345.  
  1346. SELECT
  1347. departments.*
  1348. FROM
  1349. departments
  1350. JOIN employees USING (department_id)
  1351. where salary>10000 and employee_id not in (select employee_id from job_history)
  1352.  
  1353. 22.- Mostrar los empleados que tienen el mayor salario de su departamento OJO CON ESTA!!!!!!!
  1354.  
  1355. SELECT DEPARTMENT_name,FIRST_NAME, SALARY
  1356. FROM EMPLOYEES JOIN DEPARTMENTS d using (department_id) WHERE SALARY =
  1357. (SELECT MAX(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID = d.DEPARTMENT_ID);
  1358.  
  1359. select first_name FROM employees
  1360. where (employees.department_id,salary) in(
  1361. SELECT
  1362. department_id,max(salary)
  1363. FROM
  1364. departments
  1365. JOIN employees USING (department_id)
  1366. GROUP BY department_id)
  1367.  
  1368. 23.- la persona que menos cobra por región
  1369.  
  1370. SELECT
  1371. first_name,
  1372. region_name
  1373. FROM
  1374. employees
  1375. JOIN departments USING (department_id)
  1376. JOIN locations USING (location_id)
  1377. JOIN countries USING (country_id)
  1378. JOIN regions USING (region_id)
  1379. where (salary,region_id)in (
  1380. SELECT
  1381. min(salary),
  1382. region_id
  1383. FROM
  1384. employees
  1385. JOIN departments USING (department_id)
  1386. JOIN locations USING (location_id)
  1387. JOIN countries USING (country_id)
  1388. JOIN regions USING (region_id)
  1389. group by region_id
  1390. )
  1391.  
  1392. 24.- Mostrar el nombre de los manager que tengan a su cargo más de 5 personas
  1393.  
  1394. SELECT m.first_name,m.last_name, count(*) total
  1395. FROM employees e JOIN employees m ON m.employee_id = e.manager_id
  1396. group by e.manager_id having total>5
  1397.  
  1398. 25.- los jefes que tienen jefes
  1399.  
  1400. select e.first_name, e.last_name, m.first_name, m.last_name from employees e join employees m on e.manager_id=m.employee_id and e.employee_id in (select manager_id from employees);
  1401.  
  1402. select distinct j.first_name, j.last_name, sj.first_name, sj.last_name from employees e join employees j on e.manager_id=j.employee_id join employees sj on j.manager_id=sj.employee_id
  1403.  
  1404. 26.- departamento que mas jefes tiene
  1405.  
  1406. select department_name, count(DISTINCT e.manager_id) total from departments join employees e using (department_id) GROUP BY department_id having total =
  1407. (select count(DISTINCT e.manager_id) t from departments join employees e using (department_id) GROUP BY department_id order by t desc limit 1);
  1408.  
  1409. 27.- cuantos trabajos están en mas de un departamento
  1410.  
  1411. select count(*) from (select job_title, count(distinct department_id) total from jobs join employees using (job_id) join departments using (department_id) GROUP BY job_id having total>1) a
  1412.  
  1413. 28.- nombre y apellidos, salario, trabajo y media del salario del trabajo de empleados que cobra menos de la media
  1414.  
  1415. select first_name, last_name, salary, (Select avg(salary) from employees where job_id=e.job_id) media, job_title from employees e join jobs using (job_id) having salary< media;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement