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

Duda consulta SQL

Estas en el tema de Duda consulta SQL en el foro de Bases de Datos General en Foros del Web. Hola buenas, soy nuevo por aquí, y recurro a esta página para ver si alguien sabría orientarme un poco con respecto a una consulta SQL, ...
  #1 (permalink)  
Antiguo 13/03/2015, 13:50
Avatar de carlos_91  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Duda consulta SQL

Hola buenas, soy nuevo por aquí, y recurro a esta página para ver si alguien sabría orientarme un poco con respecto a una consulta SQL, en la cual se me pide lo siguiente:

Código:
Muestra los nombres de los proyectos de investigación junto con el nombre de la
entidad que ha proporcionado más dinero para ese proyecto.
Lo que se me pide es sacar una lista en la que se muestre el nombre del proyecto y el nombre de la entidad, siendo esta la que mayor dinero haya proporcionado a dicho proyecto.

Las tablas de las cuales tengo que sacar esta informacion son las siguientes:

Código:
mysql> desc proyectosdeinvestigacion;
+---------------------+-------------+------+-----+---------+-------+
| Field               | Type        | Null | Key | Default | Extra |
+---------------------+-------------+------+-----+---------+-------+
| codigoproyecto      | varchar(6)  | NO   | PRI |         |       |
| dniprofesordirector | varchar(9)  | YES  | MUL | NULL    |       |
| nombre              | varchar(50) | NO   |     | NULL    |       |
| fechainicio         | date        | YES  |     | NULL    |       |
+---------------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> desc subvenciones;
+---------------------+--------------+------+-----+---------+-------+
| Field               | Type         | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+-------+
| nombreorganismo     | varchar(50)  | NO   | PRI |         |       |
| codigoproyecto      | varchar(6)   | NO   | PRI |         |       |
| convocatoriapublica | varchar(10)  | NO   |     | NULL    |       |
| duracion            | varchar(10)  | NO   |     | NULL    |       |
| importe             | decimal(3,1) | NO   |     | NULL    |       |
+---------------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
Mi duda viene a la hora de mostrar cada nombre de proyecto con el máximo del importe de la entidad que más le ha pagado. Agradecería si alguien pudiera echarme un cable

Un saludo.
  #2 (permalink)  
Antiguo 13/03/2015, 14:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda consulta SQL

muestra un avance de tu query......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/03/2015, 14:36
Avatar de carlos_91  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Duda consulta SQL

Ok, de momento llevo lo siguiente:

Código SQL:
Ver original
  1. SELECT nombre, nombreorganismo, importe
  2. FROM proyectosdeinvestigacion p, subvenciones s
  3. WHERE p.codigoproyecto = s.codigoproyecto
  4. GROUP BY nombre, nombreorganismo, importe;
[/CODE]

Y me devuelve lo siguiente:
Código:
+-----------------------------+--------------------+---------+
| nombre                      | nombreorganismo    | importe |
+-----------------------------+--------------------+---------+
| De la Alquimia a la Quimica | Bankia S. A. L.    |    12.3 |
| De la Alquimia a la Quimica | Fundacion la Caixa |    14.3 |
| El poder del pueblo         | Bankia S. A. L.    |    29.9 |
| El Teorema de Pitagoras     | Bankia S. A. L.    |     8.3 |
| El Teorema de Pitagoras     | Santander Credito  |    22.1 |
| Farmacos Naturales          | Fundacion la Caixa |    25.3 |
| La Republica de Platon      | Fundacion la Caixa |    25.2 |
| La Republica de Platon      | Santander Credito  |    17.5 |
| Student Book                | Santander Credito  |    15.0 |
+-----------------------------+--------------------+---------+
  #4 (permalink)  
Antiguo 13/03/2015, 14:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda consulta SQL

Código SQL:
Ver original
  1. SELECT nombre, nombreorganismo, importe
  2. FROM proyectosdeinvestigacion AS t1
  3. LEFT JOIN (SELECT MAX(importe) AS importe, nombre_organismo, codigo_proyecto FROM   subvenciones GROUP BY nombre_organismo, codigo_proyecto) AS t2 ON (t1.codigo_proyecto=t2.codigo_proyecto)

algo como eso :)

P.S: Aunque me serviria mas un ejemplo de tus datos, que tienes y que quieres obtener ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/03/2015, 16:55
Avatar de carlos_91  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Duda consulta SQL

Lo que tu me has puesto devuelve esto:

Código:
+-----------------------------+--------------------+---------+
| nombre                      | nombreorganismo    | importe |
+-----------------------------+--------------------+---------+
| Student Book                | Santander Credito  |    15.0 |
| El poder del pueblo         | Bankia S. A. L.    |    29.9 |
| La Republica de Platon      | Fundacion la Caixa |    25.2 |
| La Republica de Platon      | Santander Credito  |    17.5 |
| Farmacos Naturales          | Fundacion la Caixa |    25.3 |
| De la Alquimia a la Quimica | Bankia S. A. L.    |    12.3 |
| De la Alquimia a la Quimica | Fundacion la Caixa |    14.3 |
| El Teorema de Pitagoras     | Bankia S. A. L.    |     8.3 |
| El Teorema de Pitagoras     | Santander Credito  |    22.1 |
+-----------------------------+--------------------+---------+
Y lo que yo busco que me salga seria algo como esto:

Código:
+-----------------------------+--------------------+---------+
| nombre                      | nombreorganismo    | importe |
+-----------------------------+--------------------+---------+
| Student Book                | Santander Credito  |    15.0 |
| El poder del pueblo         | Bankia S. A. L.    |    29.9 |
| La Republica de Platon      | Fundacion la Caixa |    25.2 |
| Farmacos Naturales          | Fundacion la Caixa |    25.3 |
| De la Alquimia a la Quimica | Fundacion la Caixa |    14.3 |
| El Teorema de Pitagoras     | Santander Credito  |    22.1 |
+-----------------------------+--------------------+---------+
Osea, que me devuelva solo el importe máximo de cada nombre del proyecto, porque hay algunos proyectos que tienen mas de un organismos que los financian, y me interesa sacar solo el nombre del proyecto junto con el nombre del organismo que mas lo esta financiando. No se si me explico bien
  #6 (permalink)  
Antiguo 13/03/2015, 17:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda consulta SQL

Código SQL:
Ver original
  1. SELECT nombre, nombreorganismo, importe
  2. FROM proyectosdeinvestigacion AS t1
  3. LEFT JOIN (SELECT MAX(importe) AS importe, codigo_proyecto FROM   subvenciones GROUP BY  codigo_proyecto) AS t2 ON (t1.codigo_proyecto=t2.codigo_proyecto)

Prueba con eso, ya casi tienes resuelto el problema, trata de pensarle un poquito no????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 13/03/2015, 17:42
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: Duda consulta SQL

Siempre se puede jugar con las particularidades de MYSQL...
Código SQL:
Ver original
  1. SELECT nombre, nombreorganismo, importe
  2. FROM
  3.   (SELECT P.nombre, S.nombreorganismo, S.importe
  4.   FROM proyectosdeinvestigacion P INNER JOIN subvenciones S ON P.codigo_proyecto = S.codigo_proyecto
  5.   ORDER BY S.importe DESC, P.nombre ASC) R
  6. GROUP BY nombre;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 14/03/2015, 08:59
Avatar de carlos_91  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Duda consulta SQL

Vale, gracias con esa consulta me da el resultado que busco en MySQL, pero nunca he usado una subconsulta dentro de un FROM y no se si es lo más correcto, ademas si quiero usar esa misma consulta en ORACLE seria diferente no?
  #9 (permalink)  
Antiguo 14/03/2015, 09:13
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: Duda consulta SQL

Siempre hay diferencias cuando pasas de un DBMS a otro. Hay muchas cosas que se pueden en uno, que no existen en los demás.
En el caso de MySQL, tiene comportamientos especiales en el GROUP BY que yo a veces extraño cuando debo usar Oracle, y cosas de Oracle que necesitaría en SQL Server, y otras de SQL Server que necesitaría usar en MySQL.
Cuando uno trabaja en diferentes DBMS siempre hay que tener una cosa a mano: El Manual de Referencia.

Ningún ABD que se precie trabaja sin tener el manual a mano... Porque nadie se pone a recordar de memoria todas las carcteristicas d ecada BBDD.
Cita:
pero nunca he usado una subconsulta dentro de un FROM y no se si es lo más correcto
Voy a asumir que eso es porque no tienes ni experiencia ni has estudiado manuales básicos de SQL. Porque las subconsultas en el FROM, el WHERE y demás, no sólo son correctas, sino que además en ciertos casos son la UNICA forma de resolver las consultas que deseas de forma OPTIMA.
De lo contrario no se harían inventado...

¿No te parece?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 14/03/2015, 13:39
Avatar de carlos_91  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Duda consulta SQL

Claro eso lo entiendo, yo soy estudiante de un ciclo de Administración de Sistemas Operativos y manuales SQL no usamos, lo que tenemos es una diapositiva en la que en teoría tenemos resumido todo lo que necesitamos, si quieres echarle un vistazo se encuentra aqui: [URL="http://informatica.gonzalonazareno.org/plataforma/mod/resource/view.php?id=153"]http://informatica.gonzalonazareno.org/plataforma/mod/resource/view.php?id=153[/URL]
  #11 (permalink)  
Antiguo 14/03/2015, 17:33
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: Duda consulta SQL

La diapositiva no es relevante. Si quieres entender bien el uso de SQL tendrás que acudir a los manuales de base de datos y de SQL.
No hay otro camino.
No te quedes con lo que te dan. Se proactivo. Investiga. Profundiza.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 18/03/2015, 07:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda consulta SQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No te quedes con lo que te dan. Se proactivo. Investiga. Profundiza.
: aplauso:
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: mysql, sql, tabla
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 22:59.