Autor
|
Tema: Corregidme estos ejercicios de sql (Leído 14,118 veces)
|
CrÄsH
Desconectado
Mensajes: 624
========
|
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;
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;
|
|
« Última modificación: 29 Marzo 2009, 15:24 pm por CrÄsH »
|
En línea
|
~~~~~~~~~~~~~~~~
|
|
|
CrÄsH
Desconectado
Mensajes: 624
========
|
si son corretos decidmelo.
|
|
|
En línea
|
~~~~~~~~~~~~~~~~
|
|
|
CrÄsH
Desconectado
Mensajes: 624
========
|
Pregunta importante, almenos para mi. 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?? Gracias
|
|
|
En línea
|
~~~~~~~~~~~~~~~~
|
|
|
sempus
Dakishimetai no ni...
Colaborador
Desconectado
Mensajes: 2.391
GJDAM 愛している
|
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
|
|
|
En línea
|
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente... Descarga openSUSE
|
|
|
CrÄsH
Desconectado
Mensajes: 624
========
|
Seguro que te as fijado bien en el anunciado del segundo, pq se tenia que hacer con variables de sustitucion y no pones ninguna. En la select yo llamo el codigo de la tabla ventas y tu al codigo de la tabla articulos, estan los dos bien, o el mio no esta bien? Y el primero lo hemos echo igual pero tu usas inners y yo where. Y tambien pasa lo mismo con la select que tu seleccionas campos de otra tablas, supongo que no importara como ya hacemos el where, me equivoco?? Y gracias por contestarme esa pregunta, era una cosa que me preocupaba desde hacia tempo. Gracias!
|
|
« Última modificación: 17 Abril 2009, 12:27 pm por CrÄsH »
|
En línea
|
~~~~~~~~~~~~~~~~
|
|
|
sempus
Dakishimetai no ni...
Colaborador
Desconectado
Mensajes: 2.391
GJDAM 愛している
|
Los tuyos y los mios estan bien en ambos literales, yo coloque nada mas otra forma de hacerlo ñ_ñ solo que habran casos en los que necesitaras usar algun Join, como el left,right,full porque si relaciones una campo con otro lo que sucede es algo asi 0001 = 0001 pero y si uno de ellos estan vacios? 0001 = nada entonces con un join podrias ver este tipo de contenidos en los que si bien quieres relacionar un campo con otro tambien podria ser que te interese mas ver todos los registros aunque en algun punto no se pueda establecer una relacion (vaya, nose si me explique bien xD ) con lo del segundo es cierto xD no lei bien xD 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 WHERE b.codigo = variable GROUP BY a.codigo,a.descripcion ORDER BY a.codigo;
salu2
|
|
|
En línea
|
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente... Descarga openSUSE
|
|
|
CrÄsH
Desconectado
Mensajes: 624
========
|
Tb te decia que en las selects llamamos a campos diferents, es decir, tu llamas el campo codigo de una tabla y yo de la otra. Y te preguntaba si da igual el campo que llames si haces el where???
El seundo ejercicio que pide usar variables de sustitucion, tu me as puesto variable, sin & ni nada.es correcto? Yo puse un DEFINE hace falta??
Gracias
|
|
|
En línea
|
~~~~~~~~~~~~~~~~
|
|
|
sempus
Dakishimetai no ni...
Colaborador
Desconectado
Mensajes: 2.391
GJDAM 愛している
|
Hi pues, si, usamos dni's distintos, pero al final creo que no importa, por lo menos en el ejemplo de ls tablas que coloque arriba no importa, ya que seguiria devolviendo los mismos registros. donde trabajo se dio un caso curioso, aca quien creo el sistema guarda la descripcion del producto en la tabla padre y en la tabla ventas, ahora bien, me toco hacer una consulta pequeña en la que debia filtrar cierta informacion en la descripcion, yo como habitualmente hago, tome la descripcion de la tabla padre, pero que paso? que me equivoque en cierto modo XD, cuando se hizo una venta la descripcion de cierto codigo habia cambiado, con el tiempo volvio a cambiar y entonces hubieron dos descripciones distintas, la pregunta fue, cual de ellas era la que queriamos ver xD, en lo que comento, lo que necesitabamos era la descripcion con la que se vendio xD el segundo ejercicio depende, el gestor de datos que yo uso mas frecuentemente no necesita un DEFINE ni un & , en MySQL no he probado si esto es necesario (cuando lo compruebe te aviso ) salu2
|
|
|
En línea
|
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente... Descarga openSUSE
|
|
|
CrÄsH
Desconectado
Mensajes: 624
========
|
ok, gracias Por cierto como llebas los reportes, si no estas habituado a ellos pues mirame solo la select. -Comandos para imprimir el siguiente listado de ventas del dia.Con una pagina por cliente i teniendo en cuenta k un cliente no tendra mas ventas en un dia k las k entren en una pagina. Las ventas no estan agrupadas, es decir, si el articulo1 se vende 2 veces al cliente1 el mismo dia apareceran dos lineas. Formato: Ventas del Dia:dd/mm/aaaa DNI:11.111.111z Nombre: cliente Direccion: Poblacion: Provincia: VENTAS: CODIGO DESCRIPCION CANTIDAD PRECIO TOTAL A0001 ArTICLE1 10 100,00 1000,00 SUMA XXXXX SET ECHO OFF SET VERIFY OFF BREAK ON dni skip page COMPUTE SUM LABEL 'SUMA' OF TOTAL ON PAGE Column data noprint new_value vdata Column dni noprint new_value vdni Column nombre noprint new_value vnombre Column direccion noprint new_value vdireccion Column poblacion noprint new_value vpoblacion Column provincia noprint new_value vprovincia TTI right 'Ventas del dia:'vvdata skip1 left 'DNI:' vcldni right 'Nombre:' vclnombre skip1 left 'Direccion:'vcldireccion 'Poblacio:'vclpoblacion 'Provincia:'vclprovincia skip1 left 'VENTAS:' Select v.data, cl.dni, cl.nombre, cl.direccion, cl.poblacion, cl.provincia, v.codigo, a.descripcion, v.cantidadvendida, a.precio, sum(v.cantidadvendida*a.precio) TOTAL From articulos a, ventas v, clientes cl WHERE cl.dni=v.dni And a.codigo=v.codigo Group by v.data, cl.dni, cl.nombre, cl.direccion, cl.poblacion, cl.provincia, v.codigo, a.descripcion, v.cantidadvendida, a.precio Order by v.codi,a.descripcion; SET VERIFY ON SET ECHO ON
No hace falta que me lo hagas con joins, solo com que me digas si hay algo mal, ya me va bien. El group by lo he echo copiando toda la select excepto el SUM. Graciassss
|
|
« Última modificación: 18 Abril 2009, 14:22 pm por CrÄsH »
|
En línea
|
~~~~~~~~~~~~~~~~
|
|
|
sempus
Dakishimetai no ni...
Colaborador
Desconectado
Mensajes: 2.391
GJDAM 愛している
|
No lo he probado, pero segun veo el codigo, si tienes un codigo A0001 varias veces, este te saldra solo una vez porque los estas agrupando con el GROUP BY si lo quieres mostrar asi (por ejemplo) DNI:11.111.111z Nombre: cliente Direccion: Poblacion: Provincia: VENTAS: CODIGO DESCRIPCION CANTIDAD PRECIO TOTAL A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 A0001 ArTICLE1 10 100,00 1000,00 debes quitar el sum( ) ,ya que al hacerlo lo que haces es sumar todo el campo total, pero si lo sumas quiere decir que 8 registros (en mi ejemplo) los haces un solo registro, y para que no te de error tienes que agruparlo como lo estas haciendo ahorita. aparte de quitar el sum( ) tambien tienes que modificar el GROUP BY que estas utilizando por cierto, que gestor de bases utilizas? salu2
|
|
« Última modificación: 20 Abril 2009, 06:35 am por sempus »
|
En línea
|
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente... Descarga openSUSE
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con estos ejercicios
Programación C/C++
|
shibu
|
0
|
3,438
|
8 Abril 2012, 03:55 am
por shibu
|
|
|
como pasar estos ejercicios de pascal a c++
Programación Visual Basic
|
hunter22
|
1
|
2,465
|
17 Octubre 2013, 12:53 pm
por noele1995
|
|
|
¿Como hago estos ejercicios de C++?
Programación C/C++
|
Jose2017
|
0
|
1,925
|
7 Abril 2017, 15:14 pm
por Jose2017
|
|
|
nececito que me ayuden en estos 2 ejercicios de c++ agradeceria su colaboracion
Programación C/C++
|
yuber2017
|
3
|
2,003
|
13 Agosto 2017, 22:26 pm
por engel lex
|
|
|
Sabéis el resultado de estos ejercicios?
Dudas Generales
|
Antoniolukino
|
0
|
4,044
|
7 Noviembre 2021, 22:39 pm
por Antoniolukino
|
|