SQL - Codigo SQL

 
Vista:
sin imagen de perfil

Codigo SQL

Publicado por Jorge (1 intervención) el 23/10/2017 12:13:06
Buenas tardes.

Tengo el siguiente diagrama de BBDD, y me piden lo siguiente:

"Average, max and total budget of the projects where STRAST
researchers participate". El resultado correcto seria: (Result: 253237.13, 750000.0, 2279134.13)

STRAST es el valor de groups.acronym.

Yo he intentado lo siguiente:

SELECT SUM(Projects.budget), MAX(Projects.budget), SUM(Projects.budget)
FROM Projects

INNER JOIN Participants ON Projects.code = Participants.project
INNER JOIN Researchers ON Participants.researcher = Researchers.ID
INNER JOIN Groups ON Researchers.rgroup = Groups.acronym

WHERE Groups.acronym LIKE 'STRAST'


El problema es que ni la media ni el total me salen el valor correcto. Creo que es porque hay valores que se repiten en la columna, que yo los estoy sumando y no deberían sumarse, ya que son valores repetidos, pero no estoy seguro porque no me salen los valores correctos.

Adjunto también un zip con el código de la base de datos.

Muchas gracias de antemano,
Jorge GH
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Codigo SQL

Publicado por leonardo_josue (1173 intervenciones) el 23/10/2017 18:20:45
Hola Jorge:

No sé con qué BD's estás trabajando, pero me cuestó algo de trabajo entender el script que estás colocando... hay algunas cuestiones a considerar con tu consulta:

1. para el cálculo de porcentajes (average) utilizas en SQL la función de agrupación AVG... o en su defecto haces el cálculo matemático, es decir, la suma de los elementos entre el número de elementos a considerar...

2. No es recomendable que hagas comparaciones con LIKE si la búsqueda la vas a realizar contra un valor fijo, ya que LIKE busca COINCIDENCIAS y se utilizar con "comodines" como (%) o (_) para la búsqueda de patrones. En este caso es mejor utilizar directamente la igualdad:

1
2
3
...
WHERE Groups.acronym = 'STRAST'
...

3. Con los datos que pones de ejemplo, ¿cómo harías el cálculo matemático para obtener los valores esperados? es decir, olvídate de SQL, dinos qué es lo que tienes que sumar y/o dividir para obtener estos resultados:

1
(Result: 253237.13, 750000.0, 2279134.13)

esto nos daría pie para saber qué es lo que está mal en tu consulta.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar