SQL - COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

 
Vista:
Imágen de perfil de Emanuel
Val: 20
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por Emanuel (6 intervenciones) el 14/10/2020 20:09:30
TENGO LA SIGUIENTE TAREA:

Desarrolle una consulta donde muestre el código de empleado, el apellido espacio nombre, salario, nombre de región, nombre de país, estado de la provincia, código de departamento y nombre de departamento de los empleados que han tenido más han ocupado más de un puesto. Ordene la información por apellido de empleado ascendentemente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SELECT
E.EMPLOYEE_ID "CODIGO DE EMPLEADO",
E.LAST_NAME||' '||E.FIRST_NAME "APELLIDO NOMBRE" ,
E.SALARY SALARIO,
R.REGION_NAME REGION,
C.COUNTRY_NAME PAIS,
L.STATE_PROVINCE "ESTADO PROVINCIA",
D.DEPARTMENT_ID "CODIGO DEPARTAMENTO",
D.DEPARTMENT_NAME "NOMBRE DEPARTAMENTO"
FROM
EMPLOYEES E
JOIN
DEPARTMENTS D
ON E.DEPARTMENT_ID=D.DEPARTMENT_ID
JOIN
LOCATIONS L
ON D.LOCATION_ID=L.LOCATION_ID
JOIN
COUNTRIES C
ON L.COUNTRY_ID=C.COUNTRY_ID
JOIN
REGIONS R
ON C.REGION_ID=R.REGION_ID
WHERE (SELECT
(*)
EMPLOYEES
FROM
JOB_HISTORY
 
ORDER BY E.EMPLOYEE_ID ASC;

No se muy bien que contar en el where, alguien podria ayudarme?
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

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por anonymous (43 intervenciones) el 14/10/2020 20:46:15
Esa consulta así no te da

Porque estás ignorando la estructura JOB_HISTORY que es donde se hallan los posibles cargos de cada empleado, allí debe de haber un JOB_ID y un EMPLOYEE_ID, de tal manera que tendrías primero que evaluar quienes han ocupado en algún momento dado más de un cargo (JOB), con un query como este:

1
2
3
4
SELECT EMPLOYEE_ID, COUNT(*)
FROM HR.JOB_HISTORY
GROUP BY EMPLOYEE_ID
HAVING COUNT(*)>1

Luego los empleados que devuelva este query los cruzas contra el que tienes, quitando el pedazo donde tienes: "WHERE (SELECT (*) EMPLOYEES FROM JOB_HISTORY"

Pues eso como está te da error de sintaxis, en resumen son dos querys que tienes que enlazar
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
sin imagen de perfil

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por anonymous (43 intervenciones) el 14/10/2020 21:02:44
Podrías hacerlo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
E.EMPLOYEE_ID "CODIGO DE EMPLEADO",
E.LAST_NAME||' '||E.FIRST_NAME "APELLIDO NOMBRE" ,
E.SALARY SALARIO,
R.REGION_NAME REGION,
C.COUNTRY_NAME PAIS,
L.STATE_PROVINCE "ESTADO PROVINCIA",
D.DEPARTMENT_ID "CODIGO DEPARTAMENTO",
D.DEPARTMENT_NAME "NOMBRE DEPARTAMENTO"
FROM
EMPLOYEES E JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID=D.DEPARTMENT_ID
JOIN LOCATIONS L ON D.LOCATION_ID=L.LOCATION_ID
JOIN COUNTRIES C
ON L.COUNTRY_ID=C.COUNTRY_ID
JOIN REGIONS R
ON C.REGION_ID=R.REGION_ID
WHERE EMPLOYEE_ID IN(
SELECT EMPLOYEE_ID
FROM JOB_HISTORY
GROUP BY EMPLOYEE_ID
HAVING COUNT(*)>1)
ORDER BY E.EMPLOYEE_ID ASC;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Emanuel
Val: 20
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por Emanuel (6 intervenciones) el 14/10/2020 22:14:10
Muchas gracias, fue de gran ayuda, tengo otra consulta soy nuevo en esto del SQL

tengo este ejercicio:

Obtener el total de empleados contratados por año y por mes, de tal
forma que se muestre la columna AÑO, la columna MES y la columna EMPLEADOS CONTRATADOS

1
2
3
4
5
SELECT
EXTRACT(YEAR FROM HIRE_DATE) "AÑO",
EXTRACT (MONTH FROM HIRE_DATE) "MES"
FROM
EMPLOYEES

Ya estraje el año y el mes pero se me complica al hacer la subconsulta para el COUNT (*)
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
sin imagen de perfil

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por anonymous (43 intervenciones) el 15/10/2020 03:26:24
1
2
3
4
5
6
SELECT EMPLOYEE_ID,
EXTRACT(YEAR FROM HIRE_DATE) "AÑO",
EXTRACT (MONTH FROM HIRE_DATE) "MES",  COUNT(*) AS CANTIDAD
FROM
HR.EMPLOYEES
GROUP BY EMPLOYEE_ID, EXTRACT(YEAR FROM HIRE_DATE), EXTRACT (MONTH FROM HIRE_DATE)

Revisalo porque no lo probé...

Sin embargo me queda una duda y es que esa fecha es en la cual inició en ese job o cargo, más no cuando fue contratado por la compañía que es la fecha que está en la tabla Job_History
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Emanuel
Val: 20
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por Emanuel (6 intervenciones) el 17/10/2020 00:22:18
Si funciono, y el dato Hire_date es la fecha de contratación, tengo este otro, podrias ayudarme por favor?

Genere un reporte con nombres y apellidos de empleados, código de empleado, nombre del departamento y el salario actual de los empleados que nunca han cambiado de puesto dentro de la empresa.

siempre con el esquema HR
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
sin imagen de perfil

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por anonymous (43 intervenciones) el 17/10/2020 14:27:05
Tiene algo de parecido al primero; se supone que la estructura Job_History almacena todos los cargos que un empleado ha desempeñado, de maneara que si miras por ejemplo los siguientes empleados han tenido varios cargos:

101 Neena Kochhar (AC_ACCOUNT, AC_MGR)
200 Jennifer Whalen (AC_ACCOUNT, AD_ASST)
176 Jonathon Taylor (SA_REP, SA_MAN)

Estos desde luego no los podría mostrar, debe mostrarnos solo los que aparezcan una vez en esa tabla, luego tu query debería quedar así:

1
2
3
4
5
6
7
8
SELECT E.FIRST_NAME, E.LAST_NAME, E.EMPLOYEE_ID, D.DEPARTMENT_NAME, E.SALARY
FROM HR.EMPLOYEES E
INNER JOIN HR.DEPARTMENTS D ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
WHERE EMPLOYEE_ID IN(
SELECT EMPLOYEE_ID
FROM HR.JOB_HISTORY
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) =1)

Si analizas los resultados verás que efectivamente los empleados que arroja solo han desempeñado un solo cargo así:

102 Lex De Haan => IT_PROG
201 Michael Hartstein => ST_CLERK
114 Den Raphaely => ST_CLERK
122 Payam Kaufling => MK_REP

La clave está en practicar mucho para dominar bien el SQL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Emanuel
Val: 20
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por Emanuel (6 intervenciones) el 19/10/2020 19:15:14
Me ayudo bastante, tengo una última que no he logrado completar.
alguna sugerencia:

Realice una consulta que muestre el Department_id, el Department_name, el total de empleados por departamento, la cantidad de meses promedio que tienen laborando los empleados en dicho departamento, y el nombre y el apellido del empleado que tiene más días
laborando en ese departamento (en caso de que exista más de un empleado con la misma cantidad muestre cualquiera).


no se como calcular los meses, los dias y los promedios
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
sin imagen de perfil

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por anonymous (43 intervenciones) el 19/10/2020 20:19:28
Javier antes de hacértela, debes pensar un poco, por lo menos intentar así se cometa errores, porque no se vale que yo te las hagas todas, porque nada aprendes.

El SQL maneja una cláusula llamada: AVG que es para obtener el promedio de algo.

Esta consulta es un tanto compleja porque primero te están pidiendo cantidad de meses promedio que tienen laborando los empleados por departamento y por otro pues te piden obtener los datos de empleados que más han laborado por departamento, hacer todo un una misma consulta es complejo, se podrían construir dos consultas separadas y tratar de unirlas luego con Union ALL

Piensa primero e intenta hacerla, apoyate en google y me escribes por whatsapp que ya te lo envié

Para la primera debes emplear algo así: SELECT ROUND(AVG(EXTRACT (MONTH FROM HIRE_DATE))) FROM EMPLOYEES

El round es para que te muestre valores enteros como 8 en vez de: 8,16666666666667
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Emanuel
Val: 20
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por Emanuel (6 intervenciones) el 19/10/2020 20:40:22
Si comprendo ya hice 100 consultas, jajajaj me he quemado las cejas y la verdad ya me he aburrido, quizás sea el desgaste mental, muchas gracias por tus comentarios. Voy a intentarlo.
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
sin imagen de perfil

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por anonymous (43 intervenciones) el 19/10/2020 21:08:39
Jaja

revisa el correo interno, te lo digo es porque ese query eventualmente te devuelve ORA-01427: single-row subquery returns more than one row, y eso debes aprender a controlarlo practicando bastante
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Emanuel
Val: 20
Ha aumentado 1 puesto en SQL (en relación al último mes)
Gráfica de SQL

COMO SOLUCIONAR EL SIGUIENTE EJERCICIO DE LA BASE DE DATOS HR

Publicado por Emanuel (6 intervenciones) el 19/10/2020 21:13:08
Listo, muchas gracias...
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