Principales respuestas
Ayuda con consulta sql

Pregunta
-
Buenos días, estoy teniendo un gran problema para lograr una consulta sql, es un ejercicio planteado por lo tanto no puedo cambiar la estructura del sistema, solamente debo encontrar una solución a esta estructura :
create table cities (id int identity(1,1), name varchar(50))
insert into cities values ('Aa')
insert into cities values ('Bb')
insert into cities values ('cc')
insert into cities values ('dd')
insert into cities values ('ff')
create table people (id int identity(1,1), name varchar(50), city int, wage varchar(50))
insert into people values ('a', 2, '$90,000')
insert into people values ('b', 2, '$24,000')
insert into people values ('c', 1, '70000')
insert into people values ('d', 3, '$100,000.00')
insert into people values ('e', 5, '56,000')
insert into people values ('f', 4, '$62000')
insert into people values ('g', 3, '250000')
Bien, yo tengo que el siguiente problema, debo realizar una consulta con la cual pueda conseguir el nombre de una ciudad y su respectivo promedio de salarios. Por ejemplo ciudad: bb promedio:57000.
El primer paso que se me ocurrió fue realizar esta consulta:
Select cities.name as name, Cast(Replace(Replace(wage,'$',''),',','') As real) as wage
From people
inner join cities
on people.city=cities.idcon la cual obtengo los nombres de las ciudades y los salarios, pero me faltaría lograr utilizando avg y where o de otra forma hacer el promedio basándome en esa consulta.
La consulta que realice hasta el momento fue con el objetivo de pasar los valores varchar a real para luego poder utilizar avg.
- Editado CRoupeiro viernes, 18 de agosto de 2017 17:21
Respuestas
-
Para calcular el promedio, ponle en la lista de selección la función AVG:
Select ... AVG(Cast(Replace(Replace(wage,'$',''),',',''))...
Y para que el promedio sea "por ciudad", ponle al final de la sentencia una cláusula "group by":
GROUP BY cities.name
- Propuesto como respuesta Willams Morales viernes, 18 de agosto de 2017 17:30
- Marcado como respuesta CRoupeiro viernes, 18 de agosto de 2017 17:50
Todas las respuestas
-
Para calcular el promedio, ponle en la lista de selección la función AVG:
Select ... AVG(Cast(Replace(Replace(wage,'$',''),',',''))...
Y para que el promedio sea "por ciudad", ponle al final de la sentencia una cláusula "group by":
GROUP BY cities.name
- Propuesto como respuesta Willams Morales viernes, 18 de agosto de 2017 17:30
- Marcado como respuesta CRoupeiro viernes, 18 de agosto de 2017 17:50
-
CREATE PROCEDURE tu_procedimiento ()
begin
Select cities.name ,IF( funcion(wage), wage * v_dolar,wage )
From people
inner join cities
on people.city=cities.idend
Deberias usar una funcion pero antes de eso , dime si contiene $ No se supone que se multiplique x el tipo de cmabio para asi obtener un resultado optimo? supongo los uqe no tienen $ son otro tipo de cambio
Pasa los puntos prro v:
-
Alberto muchisimas gracias por responder,
te cuento que probe de esta forma:
Select cities.name ,avg( Cast(Replace(Replace(wage,'$',''),',','') As real)) group by cities.name
From people
inner join cities
on people.city=cities.id
y me da error
- Editado CRoupeiro viernes, 18 de agosto de 2017 17:43
-
-
No fui yo quien respondió, te respondió Alberto, yo corroboré su respuesta como correcta.
Respecto al error, la cláusula GROUP BY va luego de la cláusula FROM.
SELECT cities.name as name, AVG(CAST(REPLACE(REPLACE(wage, '$', ''), ',', '') AS decimal(9,2))) AS Average FROM people INNER JOIN cities ON people.city = cities.id GROUP BY cities.name
Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente. -