Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

los campos no corresponden....

Estas en el tema de los campos no corresponden.... en el foro de Mysql en Foros del Web. Hola a todos y gracias por adelantado.... tengo esta tabla..... Código: 'numeropresupuesto', 'int(11)', 'NO', 'PRI', '0', '' 'fecha', 'date', 'NO', '', '0000-00-00', '' 'fecharegistroenweb', 'date', ...
  #1 (permalink)  
Antiguo 06/03/2009, 05:21
Avatar de Tilens  
Fecha de Ingreso: febrero-2007
Ubicación: España
Mensajes: 41
Antigüedad: 17 años, 1 mes
Puntos: 0
los campos no corresponden....

Hola a todos y gracias por adelantado....

tengo esta tabla.....
Código:
'numeropresupuesto', 'int(11)', 'NO', 'PRI', '0', ''
'fecha', 'date', 'NO', '', '0000-00-00', ''
'fecharegistroenweb', 'date', 'NO', '', '0000-00-00', ''
'nivelpublicacion', 'int(11)', 'NO', '', '0', ''
'codigomodelo', 'varchar(255)', 'NO', '', '', ''
'memoriadecalidades', 'varchar(255)', 'NO', '', '', ''
'ordendesalida', 'int(11)', 'NO', '', '0', ''
'precioofertado', 'double', 'NO', '', '0', ''
'publicar', 'int(1)', 'NO', '', '0', ''
Y estos son los datos ordenados por precioofertado
Código:
select numeropresupuesto,codigomodelo,precioofertado from presupuestosofertados order by precioofertado;
12767, 'am105', 405148
12374, 'EL120', 496167.47
12411, 'EL120', 510691.95
12379, 'EL109', 513496.01
12361, 'EL120', 514595.48
12360, 'EL116', 517588.51
12413, 'EL109', 519779.29
12414, 'EL120', 522719.31
12358, 'EL109', 523523.2
12412, 'EL118', 557791.69
12384, 'EL118', 578840.99
12461, 'EL109', 581353.42
12453, 'EL120', 612557.24
12359, 'EP116', 635557.45
12452, 'NP103', 726288.52
12768, 'AL035', 748561
12428, 'NP104', 777191.88
12431, 'NP103', 795270.79
12427, 'NP101', 831453.96
12433, 'NP102', 994731.8
y la consulta que me da problemas es.....
Código:
select min(precioofertado),numeropresupuesto,codigomodelo from presupuestosofertados group by codigomodelo order by precioofertado;

405148, 12767, 'am105'
496167.47,12411, 'EL120'
513496.01, 12379, 'EL109'
517588.51, 12360, 'EL116'
557791.69, 12412, 'EL118'
635557.45, 12359, 'EP116'
748561, 12768, 'AL035'
777191.88, 12428, 'NP104'
726288.52, 12431, 'NP103'
831453.96, 12427, 'NP101'
994731.8, 12433, 'NP102'
Como se puede observar, SI me devuelve el precio más barato para cada modelo, pero no asocia el numeropresupuesto correcto....

he buscado y leido por ahí mucho pero no consigo el resultado correcto, he visto temas parecidos en este foro, pero no me pareció correcto cambiar el hilo de los otros usuarios....

gracias por adelantado.... y un gran saludo a todos
  #2 (permalink)  
Antiguo 06/03/2009, 07:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: los campos no corresponden....

Usar la función agregada MIN() es redundante cuando estás haciendo una agrupación. Los resultados pueden ser erráticos.
Cuando haces un ORDER BY eso hace que se ordenen según un criterio, pero ese criterio es en este caso el de sólo un campo:
Código sql:
Ver original
  1. SELECT precioofertado, numeropresupuesto, codigomodelo
  2. FROM presupuestosofertados
  3. ORDER BY precioofertado;

Y en realidad debes ordenar por precioofertado y codigomodelo.

Código sql:
Ver original
  1. SELECT precioofertado, numeropresupuesto, codigomodelo
  2. FROM presupuestosofertados
  3. ORDER BY precioofertado DESC, codigomodelo ASC;
De esa forma aparecerán agrupados por código y ordenados por el precio. Una vez q ue has logrado eso notarás que el precio menor queda arriba; pues bien, si haces un agrupamiento por el código, notarás que los restantes desaparecen, porque estas haciendo una acumulación de registros sobre el mismo valor, pero debes hacerlo como sbconsulta

Código sql:
Ver original
  1. SELECT precioofertado, numeropresupuesto, codigomodelo
  2. FROM
  3.    (SELECT precioofertado, numeropresupuesto, codigomodelo
  4.     FROM presupuestosofertados
  5.     ORDER BY precioofertado ASC codigomodelo DESC) T1
  6. GROUP BY codigomodelo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/03/2009, 03:09
Avatar de Tilens  
Fecha de Ingreso: febrero-2007
Ubicación: España
Mensajes: 41
Antigüedad: 17 años, 1 mes
Puntos: 0
De acuerdo Respuesta: los campos no corresponden....

GENIAL, he hecho las pruebas necesarias y todo a salido como esperaba, muchas gracias gnzsoloyo y sobre todo por tu buena explicación.

solo aclarar que falta una pequeña "coma" en el order by de la subconsulta, por si alguien quiere probarla.

Me doy por satisfecho. Los puntos para GNZSOLOYO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:22.