Clases Repaso 13_14

31
I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14 EJERCICIOS PRÁCTICOS SQL. - SOLUCIONES Utilizando el siguiente esquema de la base de datos “jardinería” Codifica en SQL (MySQL) sentencias para obtener la siguiente información:

description

ololololololololol

Transcript of Clases Repaso 13_14

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

EJERCICIOS PRÁCTICOS SQL. - SOLUCIONES

Utilizando el siguiente esquema de la base de datos “jardinería”

Codifica en SQL (MySQL) sentencias para obtener la siguiente información:

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el nombre (NombreCliente) de los clientes españoles.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

NombreCliente Clientes Pais = „Espa??a‟

Pais = „Spain‟

SELECT clientes.NombreCliente

FROM clientes

WHERE clientes.pais IN („Espa??a‟,‟Spain‟);

(o También)

SELECT clientes.NombreCliente

FROM clientes

WHERE (clientes.pais = „Espa??a‟) OR

(clients.pais = ‟Spain‟);

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar cuántos clientes tienen las ciudades cuyo nombre (Ciudad) contiene

la palabra “del”.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Cuántos clientes

COUNT(CodigoCliente)

Clientes Ciudad contiene „ del „

Ciudad Like „% del %„

las ciudades: Ciudad Ciudad

SELECT clientes.Ciudad ,

COUNT(clientes.CodigoCliente) AS NumClientes

FROM clientes

WHERE clientes.Ciudad LIKE „% del %‟

GROUP BY clientes.Ciudad;

Mostrar cuántos clientes tienen las ciudades cuyo nombre (Ciudad) empieza

por M.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Cuántos clientes

COUNT(CodigoCliente)

Clientes Ciudad empieza por „M„

Ciudad Like „M%„

las ciudades: Ciudad Ciudad

SELECT clientes.Ciudad ,

COUNT(clientes.CodigoCliente) AS NumClientes

FROM clientes

WHERE clientes.Ciudad LIKE „M%‟

GROUP BY clientes.Ciudad;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el código de empleado (CodigoEmpleadoRepVentas) y el número de

clientes al que atiende cada empleado.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

CodigoEmpleadoRepVentas Clientes CodigoEmpleadoRepVentas

Número de clientes

COUNT(CodigoCliente)

SELECT clientes.CodigoEmpleadoRepVentas,

COUNT(CodigoCliente) AS NumClientes

FROM clientes

GROUP BY clientes.CodigoEmpleadoRepVentas;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar cuál fue el mayor pago (Cantidad) efectuado por los clientes en el año

2008.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Mayor pago (Cantidad)

MAX(Cantidad)

Pagos Año 2008

FechaPago = ??/??/2008

YEAR(FechaPago)=2008

SELECT MAX(Cantidad)

FROM pagos

WHERE Year(FechaPago)=‟2008‟;

Mostrar cuál fue el pago medio en 2006.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Pago medio (Cantidad)

AVG(Cantidad)

Pagos Año 2006

FechaPago = ??/??/2006

YEAR(FechaPago)=2006

SELECT AVG(Cantidad)

FROM pagos

WHERE Year(FechaPago)=‟2006‟;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar cuántos clientes tiene cada país.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Cuántos clientes

COUNT(CodigoCliente)

Clientes

Cada país: País Pais

SELECT clientes.Pais,

COUNT(clientes.CodigoCliente) AS NumClientes

FROM clientes

GROUP BY Pais;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el nombre (Nombre), apellidos (Apellido1, Apellido2) y puesto

(Puesto) de aquellos empleados que no ocupen el puesto de “Representante de

ventas”.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Nombre Empleados No ocupen puesto

„Representante Ventas‟

Apellido1 NOT Puesto =

„Representante Ventass‟

Apellido2

Puesto

SELECT empleados.Nombre,

empleados.Apellido1,

empleados.Apellido2,

empleados.Puesto

FROM empleados

WHERE NOT empleados.Puesto=‟Representante Ventas‟;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar cuántas oficinas tiene la ciudad de Madrid.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Cuántas oficinas

COUNT(CodigoOficina)

Oficinas Ciudad de Madrid

Ciudad = „Madrid‟

(opcional)

Ciudad

(opcional)

Ciudad

SELECT COUNT(oficinas.CodigoOficina) AS NumOficinas

FROM oficinas

WHERE oficinas.Ciudad=‟Madrid‟;

Mostrar cuántos clientes tiene la ciudad de Madrid.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Cuántas clientes

COUNT(CodigoCliente)

Clientes Ciudad de Madrid

Ciudad = „Madrid‟

(opcional)

Ciudad

(opcional)

Ciudad

SELECT COUNT(clientes.CodigoCliente) AS NumClientes

FROM clientes

WHERE clientes.Ciudad=‟Madrid‟;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar los distintos estados por los que puede pasar un pedido.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Distintos estados

Estado

Pedidos Estado

SELECT DISTINCT pedidos.Estado

FROM pedidos;

O también

SELECT pedidos.Estado

FROM pedidos

GROUP BY pedidos.Estado;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el nombre completo del empleado (nombre y apellidos en una sola

columna), el puesto (Puesto), el código de la oficina (CodigoOficina) en la que

trabaja y la ciudad (Ciudad) y país (Pais) de dicha oficina.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Nombre completo del

empleado una columna

CONCAT(Nombre,

Apellido1, Apellido2)

Empleados

Puesto Empleados

CodigoOficina Empleados

Ciudad Oficinas

Pais Oficinas

SELECT CONCAT(empleados.Nombre, “ “, empleados.Apellido1, “ “,

empleados.Apellido2) AS NombreCompleto,

empleados.Puesto,

empleados.CodigoOficina,

oficinas.Ciudad,

oficinas.Pais

FROM empleados INNER JOIN oficinas ON

empleados.CodigoOficina=oficinas.CodigoOficina;

……

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar cuál fue el primer y último pago (FechaPago) que hizo cada cliente.

Debe mostrar también el código del cliente (CodigoCliente), nombre del cliente

(NombreCliente).

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Primer pago

MIN(FechaPago)

Pagos

Último pago

MAX(FechaPago)

Pagos

CodigoCliente Pagos CodigoCliente

NombreCliente Clientes (opcional)

NombreCliente

SELECT pagos.CodigoCliente,

clientes.NombreCliente,

MIN(pagos.FechaPago) AS PrimerPago,

MAX(pagos.FechaPago) AS UltimoPago

FROM pagos INNER JOIN clientes ON

pagos.CodigoCliente=clientes.CodigoCliente

GROUP BY pagos.CodigoCliente;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el número de pedido (CodigoPedido), fecha del pedido

(FechaPedido), fecha esperada (FechaEsperada), fecha de entrega

(FechaEntrega), código de cliente (CodigoCliente) y nombre del cliente

(NombreCliente) de los pedidos en estado “Pendiente” que han sido

entregados (tienen fecha de entrega).

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

CodigoPedido Pedidos Estado=„Pendiente‟

FechaPedido Pedidos

FechaEsperada Pedidos

FechaEntrega Pedidos Tienen algo en

FechaEntrega

NOT FechaEntrega IS

NULL

CodigoCliente Pedidos

NombreCliente Clientes

SELECT pedidos.CodigoPedido,

pedidos.FechaPedido,

pedidos.FechaEsperada,

pedidos.FechaEntrega,

pedidos.CodigoCliente,

clientes.NombreCliente

FROM pedidos INNER JOIN clientes ON

pedidos.CodigoCliente = clientes.CodigoCliente

WHERE (pedidos.Estado = „Pendiente‟) AND

(NOT Pedidos.FechaEntrega IS NULL);

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el número de pedido (CodigoPedido), fecha del pedido

(FechaPedido), fecha esperada (FechaEsperada), fecha de entrega

(FechaEntrega), código de cliente (CodigoCliente) y nombre del cliente

(NombreCliente) de los pedidos en estado “Rechazado” que han sido

entregados (tienen fecha de entrega).

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

CodigoPedido Pedidos Estado=„Rechazado‟

FechaPedido Pedidos

FechaEsperada Pedidos

FechaEntrega Pedidos Tienen algo en

FechaEntrega

NOT FechaEntrega IS

NULL

CodigoCliente Pedidos

NombreCliente Clientes

SELECT pedidos.CodigoPedido,

pedidos.FechaPedido,

pedidos.FechaEsperada,

pedidos.FechaEntrega,

pedidos.CodigoCliente,

clientes.NombreCliente

FROM pedidos INNER JOIN clientes ON

pedidos.CodigoCliente = clientes.CodigoCliente

WHERE (pedidos.Estado = „Rechazado‟) AND

(NOT Pedidos.FechaEntrega IS NULL);

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar un listado de los 5 productos que más beneficios producen a la

empresa en cada pedido. Deben mostrar el código del producto

(CodigoProducto), nombre del producto (Nombre) y el beneficio sobre cada

unidad de producto pedido.

Beneficio = (detallepedidos.PrecioUnidad – productos.PrecioProveedor)

(pista: Usar el filtro LIMIT de MySQL)

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

CodigoProducto Detallepedidos CodigoProducto

Nombre Productos Nombre

Beneficio =

PrecioUnidad -

PrecioProveedor

Detallepedidos

Productos

Beneficio

AGRUPAR para evitar que el mismo producto ocupe los 5 primeros puestos

ORDENAR DESCENDENTE para que aparezcan primero los mayores valores

de beneficio.

LIMITAR a los 5 primeros

SELECT detallepedidos.CodigoProducto,

productos.Nombre,

(detallepedidos.PrecioUnidad – productos.PrecioProveedor) AS Benef

FROM detallepedidos INNER JOIN productos ON

detallepedidos.CodigoProducto = productos.CodigoProducto

GROUP BY detallepedidos.CodigoProducto,

productos.Nombre,

Benef

ORDER BY Benef DESC LIMIT 5;

Probar a quitar el agrupamiento o a agrupar sólo por CodigoProducto

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el número de pedido (CodigoPedido), código de cliente

(CodigoCliente), nombre de cliente (NombreCliente), teléfono del cliente

(Telefono), estado del pedido (Estado), fecha esperada (FechaEsperada) y

fecha de entrega (FechaEntrega) de los pedidos cuya fecha de entrega ha sido

al menos tres días después de la fecha esperada.

(pista: Usar la función addDate() de MySQL)

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

CodigoPedido Pedidos

CodigoCliente Pedidos

NombreCliente Clientes

Telefono Clientes

Estado Pedidos

FechaEsperada Pedidos

FechaEntrega Pedidos FechaEntrega >=

FechaEsperada + 3

SELECT pedidos.CodigoPedido,

pedidos.CodigoCliente,

clientes.NombreCliente,

clientes.Telefono,

pedidos.Estado,

pedidos.FechaEsperada,

pedidos.FechaEntrega

FROM pedidos INNER JOIN clientes ON

pedidos.CodigoCliente = clientes.CodigoCliente

WHERE pedidos.FechaEntrega>=addDate(pedidos.FechaEsperada,3);

……………

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar las gamas de los productos (DescripcionTexto) y el importe total que

suman los productos que tenemos en stock (CantidadEnStock * PrecioVenta)

de cada gama de producto.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

DescripcionTexto GamasProductos DescripcionTexto

ImporteTotal =

SUM(

CantidadEnStock *

PrecioVenta)

Productos

Productos

SELECT gamasproductos.DescripcionTexto,

SUM(productos.CantidadEnStock*productos.PrecioVenta) AS ImporteTotal

FROM productos INNER JOIN gamasproductos ON

productos.Gama=gamasproductos.Gama

GROUP BY gamasproductos.DescripcionTexto;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar las gamas de los productos (Gama y DescripcionTexto) y el importe

total que suman los productos que tenemos en stock de cada gama de producto.

(Importe = (CantidadEnStock * PrecioVenta)). Mostrar sólo las gamas de

productos en las que el importe total supere el valor de 10000.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Gama GamasProductos Gama

DescripcionTexto GamasProductos

ImporteTotal =

SUM(

CantidadEnStock *

PrecioVenta)

Productos

Productos

ImporteTotal > 1000

SELECT gamasproductos.Gama,

gamasproductos.DescripcionTexto,

SUM(productos.CantidadEnStock*productos.PrecioVenta) AS ImporteTotal

FROM productos INNER JOIN gamasproductos ON

productos.Gama=gamasproductos.Gama

GROUP BY gamasproductos.Gama

HAVING ImporteTotal>10000;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el código del producto (CodigoProducto), nombre del producto

(Nombre), gama del producto (DescripcionTexto) y la cantidad total (suma)

pedida de cada producto (detallepedidos.Cantidad), de los productos de la

gama “Frutales”.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

CodigoProducto Productos CodigoProducto

Nombre Productos

DescripcionTexto GamasProductos

CantidadTotal =

SUM(

Cantidad)

DetallePedidos

Gama = „Frutales‟

Tenemos dos posibilidades:

Todos los productos de „Frutales‟ aunque no se hayan pedido nunca

SELECT productos.CodigoProducto,

productos.Nombre,

gamasproductos.DescripcionTexto,

SUM(detallepedidos.Cantidad) AS CantidadTotal

FROM productos INNER JOIN gamasproductos ON

productos.Gama=gamasproductos.Gama

LEFT JOIN detallepedidos ON

productos.CodigoProducto=detallepedidos.CodigoProducto

WHERE productos.Gama=‟Frutales‟

GROUP BY productos.CodigoProducto,

productos.Nombre,

gamasproductos.DescripcionTexto;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

…………

Con LEFT JOIN a la tabla detallepedidos muestra todos los productos de la

gama, aunque no se hayan pedido nunca.

Todos los productos de „Frutales‟ que se han pedido alguna vez

SELECT productos.CodigoProducto,

productos.Nombre,

gamasproductos.DescripcionTexto,

SUM(detallepedidos.Cantidad) AS CantidadTotal

FROM productos INNER JOIN gamasproductos ON

productos.Gama=gamasproductos.Gama

INNER JOIN detallepedidos ON

productos.CodigoProducto=detallepedidos.CodigoProducto

WHERE productos.Gama=‟Frutales‟

GROUP BY productos.CodigoProducto,

productos.Nombre,

gamasproductos.DescripcionTexto;

…………..

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el nombre completo (Nombre, Apellido1 y Apellido2) de los

empleados del puesto (Puesto) “Representante de ventas”, el nombre de los

clientes a los que representa (NombreCliente) y el teléfono del cliente

(Telefono) de todos los clientes de la ciudad de Madrid. Ordenado por nombre y

apellidos del empleado representante de ventas y después por nombre del

cliente.

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

Nombre Empleados

Apellido1 Empleados

Apellido2 Empleados

Puesto = „Representante Ventas‟

NombreCliente Clientes

Telefono Clientes

Ciudad = „Madrid‟

ORDENAR POR Nombre, Apellido1, Apellido2, NombreCliente

SELECT empleados.Nombre,

empleados.Apellido1,

empleados.Apellido2,

clientes.NombreCliente,

clientes.Telefono

FROM clientes INNER JOIN empleados

ON clientes.CodigoEmpleadoRepVentas = empleados.CodigoEmpleado

WHERE empleados.Puesto=‟Representante Ventas‟ AND

clientes.Ciudad='Madrid'

ORDER BY empleados.Nombre,

empleados.Apellido1,

empleados.Apellido2,

clientes.NombreCliente;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el importe total de los pagos efectuados por cada cliente de España

(Espa??a o Spain). Debe mostrar el código del cliente (CodigoCliente), nombre

del cliente (NombreCliente) y el importe total pagado (suma de las

cantidades).

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

ImporteTotal ?????????? Pagos

Clientes Pais = „Espa??a‟ o

Pais = „Spain‟

CodigoCliente Clientes CodigoCliente

NombreCliente Clientes

ImporteTotal =

SUM(

Cantidad)

Pagos

SELECT pagos.CodigoCliente,

clientes.NombreCliente,

SUM(pagos.Cantidad) AS TotalPagado

FROM pagos INNER JOIN clientes

ON pagos.CodigoCliente = clientes.CodigoCliente

WHERE clientes.Pais IN ('Espa??a','Spain')

GROUP BY pagos.CodigoCliente,

clientes.NombreCliente;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el importe total de los pagos efectuados por cada cliente de España

(Espa??a o Spain). Debe mostrar el código del cliente (CodigoCliente), nombre

del cliente (NombreCliente) y el importe total pagado (suma de las

cantidades). Mostrar sólo cuando el importe total supere el valor de 10000.)

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

ImporteTotal ?????????? Pagos

Clientes Pais = „Espa??a‟ o

Pais = „Spain‟

CodigoCliente Clientes CodigoCliente

NombreCliente Clientes

ImporteTotal =

SUM(

Cantidad)

Pagos

ImporteTotal > 10000

SELECT pagos.CodigoCliente,

clientes.NombreCliente,

SUM(pagos.Cantidad) AS TotalPagado

FROM pagos INNER JOIN clientes

ON pagos.CodigoCliente = clientes.CodigoCliente

WHERE clientes.Pais IN ('Espa??a','Spain')

GROUP BY pagos.CodigoCliente,

clientes.NombreCliente

HAVING TotalPagado > 10000;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar los nombres completos (nombre y apellidos en una sola columna) de

los empleados acompañados de los nombres completos (nombre y apellidos en

una sola columna) de sus jefes de aquellos empleados cuyo puesto (Puesto) sea

„Representante Ventas‟. Se debe mostrar también el puesto que ocupa el jefe

(Puesto).

¿Qué mostrar? ¿Dónde buscar? Filtro Agrupar

NombreCompleto =

CONCAT(

Nombre,

Apellido1,

Apellido2)

Empleados

Empleados

Empleados

NombreCompleto =

CONCAT(

Nombre,

Apellido1,

Apellido2)

Empleados AS Jefes

Empleados AS Jefes

Empleados AS Jefes

Empleados.Puesto =

„Representante Ventas‟

Puesto Empleados AS Jefes

SELECT CONCAT(empleados.Nombre, “ “,

empleados.Apellido1, “ “,

empleados.Apellido2) AS NombreEmpleado,

CONCAT(jefes.Nombre, “ “,

jefes.Apellido1, “ “,

jefes.Apellido2) AS NombreJefe,

jefes.Puesto AS PuestoJefe

FROM empleados INNER JOIN empleados jefes

ON empleados.CodigoJefe = jefes.CodigoEmpleado

WHERE empleados.Puesto='Representante Ventas';

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el número de pedido (pedidos. CodigoPedido), código de cliente

(pedidos.CodigoCliente), nombre del cliente (clientes.NombreCliente), fecha requerida

(pedidos.FechaEsperada) y fecha de entrega (pedidos.FechaEntrega) de los pedidos que no

han sido entregados a tiempo

Entrega a tiempo: (pedidos.FechaEntrega<=pedidos.FechaEsperada)

Entrega fuera de tiempo: (pedidos.FechaEntrega>pedidos.FechaEsperada)

SELECT pedidos .CodigoPedido,

pedidos.CodigoCliente,

clientes.NombreCliente,

pedidos.FechaEsperada,

pedidos.FechaEntrega

FROM pedidos INNER JOIN clientes

ON pedidos.CodigoCliente = clientes.CodigoCliente

WHERE FechaEntrega > FechaEsperada;

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el número de pedido (pedidos. CodigoPedido), código de cliente

(pedidos.CodigoCliente), nombre de cliente (clientes.NombreCliente), estado del pedido

(pedidos.Estado), fecha esperada (pedidos.FechaEsperada) y fecha de entrega (pedidos.

FechaEntrega) de los pedidos cuya fecha de entrega ha sido al menos tres días antes de la

fecha esperada. (pista: Usar la función addDate de MySQL)

FechaEntrega anterior a FechaEsperada implica:

pedidos.FechaEntrega < pedidos.FechaEsperada

3 días antes de la FechaEsperada es restar 3 días a la FechaEsperada:

addDate(pedidos.FechaEsperada , -3)

Al menos 3 días antes <=:

pedidos.FechaEntrega<=addDate(pedidos.FechaEsperada,-3)

SELECT pedidos.CodigoPedido,

pedidos.CodigoCliente,

clientes.NombreCliente,

pedidos.Estado,

pedidos.FechaEsperada,

pedidos.FechaEntrega

FROM pedidos INNER JOIN clientes

ON pedidos.CodigoCliente = clientes.CodigoCliente

WHERE pedidos.FechaEntrega<=addDate(pedidos.FechaEsperada,-3);

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar la facturación que ha tenido la empresa en toda la historia (TODOS LOS

REGISTROS), indicando la base imponible, el IGIC y el total facturado.

NOTA: La base imponible se calcula sumando el coste del producto (detallepedidos.

PrecioUnidad) por el número de unidades vendidas (detallepedidos.Cantidad)

El IGIC es el 5 % de la base imponible, y el total facturado, la suma de los dos valores

calculados anteriormente (Base imponible + IGIC).

El número de unidades vendidas de cada producto sólo puede estar en la tabla

detallespedidos:

Detallepedidos.Cantidad

SELECT SUM(detallepedidos.Cantidad * detallepedidos.PrecioUnidad) AS

BaseImponible,

SUM((((detallepedidos.Cantidad * detallepedidos.PrecioUnidad)*5)/100)) AS

TotalIVA,

SUM((detallepedidos.Cantidad * detallepedidos.PrecioUnidad) +

((( detallepedidos.Cantidad * detallepedidos.PrecioUnidad)*5)/100)) AS

TotalVentas

FROM detallepedidos;

Se podía entender que el coste del producto es el campo:

productos.PrecioVenta

o también

productos.PrecioProveedor

Ambos eran válidos aunque la consulta sale un poco más compleja.

I.E.S. Puerto de la Cruz 1º ASIR - GTB Curso 2013/14

Mostrar el código del producto, nombre del producto, gama del producto y la cantidad

total pedida de cada producto (detallepedidos), de los productos de la gama

“Herramientas”.

SELECT detallepedidos.CodigoProducto,

productos.Nombre,

productos.Gama,

SUM(detallepedidos.Cantidad)

FROM detallepedidos INNER JOIN productos

ON detallepedidos.CodigoProducto = productos.CodigoProducto

WHERE productos.Gama='Herramientas'

(*) GROUP BY detallepedidos.CodigoProducto,

productos.Nombre,

productos.Gama;

(*) Si hay función de resumen o agrupamiento (SUM()) los campos que vamos a

mostrar deben estar incluidos en la cláusula GROUP BY obligatoriamente.