Lo siento por contestar tan tarde, pero espero que aun te sirva de algo xD
Veis algun error en estos dos ejercicios de sql??
Tenemos estas tablas:
Clientes(DNI,nombre,direccion, poblacion, districto postal, provincia)
Articulos(CODIGO, descripcion, cantidadstock, precio)
Ventas(dni, codigo, data, cantidadvendida)
1-Select para saber el total de euros vendidos a cada cliente a lo largo de tota la vida.
FORMATO: DNI nombre importe total
--------------------------------
SELECT v.dni, cl.nombre, sum(v.cantidadvendida*a.preu) importe total
FROM clientes cl, articulos a, ventas v
WHERE cl.dni=v.dni
GROUP BY v.dni,cl.nombre
ORDER BY cl.dni;
Error quiza no, la logica de lo que quieres hacer permanece que es lo importante, pero en tu lugar yo usaria los Joins para hacerlo aunque se puede hacer en cierto modo de la forma en que tu lo has planteado.
Palara auxiliarme un poco en este intento de explicacion he creado las tablas e insertado 5 registros en cada tabla.
registros por tabla:
mysql> select * from clientes;
+------+--------------+
| dni | nombre |
+------+--------------+
| 1 | carlos |
| 2 | pepito |
| 3 | fulanito |
| 4 | menganito |
| 5 | sutanito |
+------+--------------+
5 rows in set (0.00 sec)
mysql> select * from articulos;
+--------+------+---------------------------+
| codigo | preu | descripcion |
+--------+------+---------------------------+
| 1 | 0.25 | grapas |
| 2 | 0.5 | lapicero bic |
| 3 | 0.75 | lapiz mogol |
| 4 | 0.95 | lapiz facela |
| 5 | 2.95 | colores 6 unidades |
| 6 | 9.95 | libro - La Ceiba |
+--------+------+----------------------------+
6 rows in set (0.00 sec)
mysql> select * from ventas;
+--------+--------------+------------+
| codigo | cant_vendida | dni |
+--------+--------------+------------+
| 1 | 20 | 1 |
| 2 | 10 | 5 |
| 1 | 35 | 3 |
| 5 | 5 | 3 |
| 5 | 5 | 5 |
| 1 | 30 | 1 |
| 2 | 12 | 2 |
| 3 | 2 | 3 |
| 4 | 5 | 5 |
| 4 | 5 | 4 |
| 4 | 4 | 4 |
+--------+--------------+-------------+
11 rows in set (0.00 sec)
ahora, el numero de registros de la consulta deberia ser simplemente 5
asi
SELECT a.dni,a.nombre,SUM(b.preu * c.cant_vendida)total_importe FROM clientes a INNER JOIN ventas c ON a.dni=c.dni INNER JOIN articulos b ON b.codigo=c.codigo GROUP BY a.dni,a.nombre ORDER BY a.dni;
+------+-----------+-------------------------+
| dni | nombre | total_importe |
+------+-----------+-------------------------+
| 1 | carlos | 12.5 |
| 2 | pepito | 6 |
| 3 | fulanito | 25.00 |
| 4 | menganito | 8.55 |
| 5 | sutanito | 24.50 |
+------+-----------+-------------------------+
5 rows in set (0.12 sec)
2-Select para saber los euros vendidos de un articulo kualkiera, el codigo del articulo se pide mediante variables de sustitucion.
Codigo descripcion importe total
----------------------------------------
DEFINE codart
SELECT v.codigo, a.descripcion, sum(v.cantidadvendida*a.preu) importe total
FROM articulos a, ventas v
WHERE v.codigo=a.codigo
And v.codigo=&codart
GROUP BY v.codi, a.descripcion
ORDER BY v.codi;
bueno, este es bastante parecido , solo que no involucramos la tabla clientes
ya que solo tengo 5 codigos en la tabla articulos, la consulta tambien deberia devolverme solo 5 registros
SELECT a.codigo,a.descripcion,SUM(a.preu*b.cant_vendida) total_importe FROM articulos a INNER JOIN ventas b ON a.codigo = b.codigo GROUP BY a.codigo,a.descripcion ORDER BY a.codigo;
+--------+--------------------+----------------------------+
| codigo | descripcion | total_importe |
+--------+--------------------+----------------------------+
| 1 | grapas | 21.25 |
| 2 | lapicero bic | 11 |
| 3 | lapiz mogol | 1.5 |
| 4 | lapiz facela | 13.29 |
| 5 | colores 6 unidades | 29.50 |
+--------+--------------------+----------------------------+
5 rows in set (0.00 sec)
espero no haberme equivocado XD
Si se hace un calculo, ejemplo:
Select tabl1.camp1 , tabla2.camp2, (tabla2.camp2*tabla3.camp3) as Total
From tabla1, tabla2, tabla3
where ....
Pregunta: Siempre k hay un calculo en la select , Hay que poner un GROUP BY??
no en los calculos, sino cuando usas sum( ) o un max( ) etc
porque podrias tener
select codigo, (precio * cant_vendida) total from ventas y en este caso no necesitas hacer la agrupacion, incluso creo que si das group by te daria error porque no hay datos que agrupar, porque el campo lo estas agregando por registro, entonces si tienes 10 veces repetido el codigo 1 te saldran las 10 veces en la consulta
espero que en algo te ayude
salu2