Creación de vistas en MySQL para análisis de ganancias

  • Autor Autor saroan
  • Fecha de inicio Fecha de inicio
S

saroan

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Iré planteando una serie de ejercicios los cual debo resolver , gracias

bdcientificos.webp

4. ¿En qué proyecto ha ganado más dinero 'Mara Reina'?, ¿cuánto ha ganado?. Crea la vista 'mara'
para ver lo que ha ganado Mara en cada proyecto, después usa esa vista para crear otra vista y
resolver la consulta. 'maxmara'.

Insertar CODE, HTML o PHP:
create or replace view mara 
select count(asignado_a.proyecto)* horas * 120 ,proyectos.nombre
from proyectos,asignado_a,cientificos
where asignado_a.cientifico = cientificos.dni 
and asignado_a.proyecto = proyectos.id
group by proyectos.id;

Me da error de sintaxis en linea 2 y no hallo el error , otra duda tengo es como crear una vista a partir de otra ...
 
Hola [MENTION=163245]saroan[/MENTION],

A simple vista, sin meter la vista en un compilador de código SQL, sin saber cual es el error que da, ni que SGDB estás utilizando, parece que estás usando una función de grupo en un campo que no forma un grupo.

Y ahora en cristiano, estas seleccionando "count(asignado_a.proyecto)", sin embargo "asignado_a.proyecto" no aparece en el group by.
Visto esto, tienes dos opciones, como estás igualando asignado_a.proyecto y proyectos.id:

1.- Cambiar count(asignado_a.proyecto) por count(proyectos.id)
2.- Cambiar group by proyectos.id por group by asignado_a.proyecto;

Respecto a la otra duda, lo único que tienes que hacer es poner el nombre de la vista dentro del from, es decir, en vez de poner from [NOMBRE TABLA] poner from [NOMBRE VISTA].

Espero que esto resuelva tu duda.

Un saludo,
 
No funciona ni lo uno , ni lo otro y da error de sintaxis en linea 2 , uso XAMPP , que actualmente usa el fork de MYSQL - MariaDB

Insertar CODE, HTML o PHP:
MariaDB [cientificos]> create or replace view mara
    -> select count(proyectos.id)* horas * 120 ,proyectos.nombre
    -> from proyectos,asignado_a,cientificos
    -> where asignado_a.cientifico = cientificos.dni
    -> and asignado_a.proyecto = proyectos.id
    -> group by proyectos.id;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'select count(proyectos.id)* horas * 120 ,proyectos.nombre
from proyectos,asignad' at line 2
MariaDB [cientificos]> create or replace view mara
    -> select count(asignado_a.proyecto)* horas * 120 ,proyectos.nombre
    -> from proyectos,asignado_a,cientificos
    -> where asignado_a.cientifico = cientificos.dni
    -> and asignado_a.proyecto = proyectos.id
    -> group by asignado_a.proyecto;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'select count(asignado_a.proyecto)* horas * 120 ,proyectos.nombre
from proyectos,' at line 2
MariaDB [cientificos]>
 
Hola [MENTION=163245]saroan[/MENTION],

Te falta la palabra AS después del nombre de la vista.

Insertar CODE, HTML o PHP:
create or replace view mara as
select count(proyectos.id)* horas * 120 ,proyectos.nombre
from proyectos,asignado_a,cientificos
where asignado_a.cientifico = cientificos.dni
and asignado_a.proyecto = proyectos.id
group by proyectos.id;

Un saludo,
 
Vale gracias , pero una cosa según tu opinión y conocimientos lo digo por que un compañero , me ha pasado lo que él ha hecho , y no tiene nada que ver además el pone más cosas de código
 
Hola [MENTION=163245]saroan[/MENTION],

Si yo tuviera que hacer una vista así, contendría el siguiente código sql:

Insertar CODE, HTML o PHP:
select proyectos.nombre, proyectos.horas * 120
from proyectos,asignado_a,cientificos
where asignado_a.cientifico = cientificos.dni 
and asignado_a.proyecto = proyectos.id
and cientificos.nombre = 'Mara Reina'
order by 2 desc;

Suponiendo que esta query cree una vista llamada mara, la segunda parte la resolveria de la siguiente forma:

Insertar CODE, HTML o PHP:
select *
from mara
limit 1;

Si comparas estas queries con otras personas, es probable que ellos utilicen la función max(). Pero este código es mas eficiente. 😉

Un saludo,
 
Pues mira que testamento puso mi compañero , no hace lo mismo que el tuyo

[hide]
Insertar CODE, HTML o PHP:
create or replace view mara (proyecto, ganancias) as
select p.nombre, p.horas * 80 from proyectos p, asignado_a a, 
cientificos c 
where c.nombre = 'Mara Reina' and a.cientifico = c.dni and p.id 
= a.proyecto;

select concat('Mara Reina en el proyecto ', proyecto, 
' ha ganado ', ganancias) 
from mara;

create or replace view maxmara (proyecto, gana) as
select proyecto, ganancias from mara
order by ganancias desc
limit 1;

select concat(' Lo maximo que llega a ganar Mara Reina es en el 
proyecto ', proyecto, ' y gana ', gana) from maxmara;


create or replace view mara (proyecto, ganancias) as
select proyectos.nombre, proyectos.horas * 80 from proyectos , 
asignado_a , cientificos 
where cientificos.nombre = 'Mara Reina' and asignado_a.cientifico = 
cientificos.dni and asignado_a.proyecto =  proyectos.id;

select concat('Mara Reina en el proyecto ', proyecto, ' ha ganado ', 
ganancias) 
from mara;

create or replace view maxmara (proyecto, gana) as
select proyecto, ganancias from mara
order by ganancias desc
limit 1;

select concat(' Lo maximo que llega a ganar Mara Reina es en el
 proyecto ', proyecto, ' y gana ', gana) from maxmara;[/hide]

se me olvido añadir el tema de que tenemos que concatenar todo
 
Son exactamente iguales, las únicas diferencias que veo es que el multiplica por 80 y concatena esas constantes.

Un saludo,
 
No entiendo como puedes decir son iguales , sí como digo no da el mismo resultado y una respuesta tiene más código que otra
 

Temas similares

B
Respuestas
11
Visitas
1K
djbrayner
D
Atrás
Arriba