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

problema con consulta sql sencilla

Estas en el tema de problema con consulta sql sencilla en el foro de Bases de Datos General en Foros del Web. como puedo hacer la siguiente consulta? me estoy volviendo LOCoO Y ESO q supongo que es algo facil!.. Tengo Dos tablas tabla:-------- campos Alumnos: -------- ...
  #1 (permalink)  
Antiguo 22/08/2010, 12:50
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
problema con consulta sql sencilla

como puedo hacer la siguiente consulta?

me estoy volviendo LOCoO Y ESO q supongo que es algo facil!..

Tengo Dos tablas

tabla:-------- campos


Alumnos: -------- nombre, DNI


Notas:----------- nota, DNI

en notas tengo todas las notas de cada alumno

la consulta que quiero hacer es que me muestre todos los alumnos con su nota mas alta incluyendo aquellos que no tengan notas por ejemplo

pedro "20"
juan "19"
alberto "20"
jose " "

Por fa el que me pueda ayudar de una le agradezco y Gracias!:. XD
  #2 (permalink)  
Antiguo 22/08/2010, 14:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 81
Antigüedad: 15 años, 5 meses
Puntos: 3
Respuesta: problema con consulta sql sencilla

Bueno, como no especificas cual DB estas utilizando, ahi va en mysql:

Código MySQL:
Ver original
  1. select alumnos.nombre,notas.NOTA from alumnos left join notas on alumnos.DNI = notas.DNI ORDER BY notas.nota desc

Saludos!
  #3 (permalink)  
Antiguo 22/08/2010, 15:01
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: problema con consulta sql sencilla

Hola,

Cita:
Iniciado por sharles Ver Mensaje
... todos los alumnos con su nota mas alta incluyendo aquellos que no tengan notas ...
¿Solamente la nota mas alta?

Código MySQL:
Ver original
  1.   a.nombre
  2.   MAX(n.nota) MaximaNota
  3.   alumnos a
  4.   left join notas n on a.dni = n.dni
  5.   a.nombre

Saludos,
  #4 (permalink)  
Antiguo 23/08/2010, 10:45
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: problema con consulta sql sencilla

/* Primero reconoce q eres un principiante...

aqui va....

select a.nombre, max(n.nota) nota_Maxima from alumno a inner join nota n on a.alumno_id = n.alumno_id
*/
  #5 (permalink)  
Antiguo 23/08/2010, 11:40
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: problema con consulta sql sencilla

Hola,

Cita:
Iniciado por sharles Ver Mensaje
... todos los alumnos con su nota mas alta incluyendo aquellos que no tengan notas ...
Cita:
Iniciado por __SDP__ Ver Mensaje
select a.nombre, max(n.nota) nota_Maxima from alumno a inner join nota n on a.alumno_id = n.alumno_id
Todos los alumnos, no solo los que tengan notas, todos.

Código MySQL:
Ver original
  1.   a.nombre
  2.   MAX(n.nota) MaximaNota
  3.   alumnos a
  4.   left join notas n on a.dni = n.dni
  5.   a.nombre

El 'group by' es obligatorio en SQL Server y otros al usar una función de agregado como MAX(). A MySQL le viene igual.

Saludos,
  #6 (permalink)  
Antiguo 28/08/2010, 08:51
 
Fecha de Ingreso: diciembre-2008
Mensajes: 32
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con consulta sql sencilla

Solo una abservacion a la consulta de HackmanC, yo ejecutaria la clausula group by asi:

GROUP BY
a.dni

ya que cabe la posibilidad de que dos alumnos se llamen igual, por lo cual la nota maxima seria sacada de entre los dos alumnos que tienen el mismo nombre... ¿nose si sera algo muy rebuscado :=D?
  #7 (permalink)  
Antiguo 28/08/2010, 09:01
 
Fecha de Ingreso: diciembre-2008
Mensajes: 32
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: problema con consulta sql sencilla

viendolo bien la consulta deberia ser asi:
SELECT
a.nombre
MAX(n.nota) MaximaNota
FROM
alumnos a
LEFT JOIN notas n on a.dni = n.dni
GROUP BY
n.dni

pd. en el anterior mensaje puse a.dni, me equivoque es n.dni

Última edición por margaro; 28/08/2010 a las 09:14
  #8 (permalink)  
Antiguo 28/08/2010, 16:14
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: problema con consulta sql sencilla

Hola,

Cita:
Iniciado por margaro Ver Mensaje
Solo una abservacion a la consulta de HackmanC, yo ejecutaria la clausula group by asi:

GROUP BY
a.dni

ya que cabe la posibilidad de que dos alumnos se llamen igual, por lo cual la nota maxima seria sacada de entre los dos alumnos que tienen el mismo nombre...
Tienes toda la razón, aunque en ese caso dependiendo de la base de datos que esté usando (que al final no se sabe) debería escribirse así:

Código MySQL:
Ver original
  1.   a.id,
  2.   a.nombre,
  3.   MAX(n.nota) MaximaNota
  4.   alumnos a
  5.   left join notas n on a.dni = n.dni
  6.   a.id, a.nombre

Cuando se usa GROUP BY con una función de agregado, todos los campos que no estén en una función de agregado deben aparecer en la clausula GROUP BY. Es decir a.nombre debe de aparecer allí forzosamente si está en la clausula SELECT.

Saludos,

ps:

MySQL funciona diferente a algunas otras bases de datos en la clausula GROUP BY como Microsoft SQL Server y postgreSQL, en MySQL no es obligatorio poner a.nombre o los campos que no tengan una función de agregado.

Etiquetas: sencilla, sql
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:34.