2017-12-05 1 views
0

Ich habe 2 Aufgaben:JOIN - 2 Aufgaben - SQL-Entwickler

1. erste Aufgabe

anzeigen first_name, last_name (von Mitarbeitern), job_title, employee_id (von Jobs) start_date, end_date (aus job_history)

Meine Idee:

SELECT s.employee_id 
    , first_name 
    , last_name 
    , job_title 
    , employee_id 
    , start_date 
    , end_date 
FROM employees 
INNER JOIN jobs hp 
    on s.employee_id = hp.employee_id 
INNER JOIN job_history 
    on hp.jobs = h.jobs 
  1. ich weiß es nicht funktioniert. Ich erhalte: "HP". "EMPLOYEE_ID": Ungültige ID
  2. Was bedeutet "on semployee_id = hp.employee_id"? Vielleicht sollte ich stattdessen etwas anderes schreiben.

2. zweite Aufgabe

anzeigen department_name (von Abteilungen), durchschnittlich und max Gehalt für jede Abteilung (die Daten von Mitarbeitern sind) und wie viele Mitarbeiter in diesen Abteilungen arbeiten (von Mitarbeitern) . Wählen Sie nur Abteilungen mit mehr als 1 Person. Das Ergebnis wird auf 2 Dezimalstellen umgerechnet.

Ich habe die Stücke, aber ich weiß nicht, es Meine Idee zu verbinden:

SELECT department_name,average(salary),max(salary),count(employees_id) 
FROM employees 
INNER JOIN departments 
on employees_id = departments_id 
HAVING count(department) > 1 


SELECT ROUND(average(salary),2) from employees 
+0

Ihre erste Abfrage. 's.employee_id'. Ich sehe keinen Tisch namens 's'. – Eric

Antwort

0

ich Ihre Fragen ein bisschen durch die Verbesserung der Tabelle Aliasing modifiziert. Hoffentlich, wenn die richtigen Spalten in den Tabellen sind wie Sie sagen, sollte es funktionieren:

SELECT s.employee_id, s.first_name, s.last_name, 
hp.job_title, hp.employee_id, 
h.start_date, h.end_date 
FROM employees s 
INNER JOIN jobs hp 
on s.employee_id = hp.employee_id 
INNER JOIN job_history h 
on hp.jobs = h.jobs; 

Wenn wir on s.employee_id = hp.employee_id sagen, es bedeutet, dass, wenn zum Beispiel gibt es eine employee_id = 1234 in beiden Tabellen employees und jobs , dann holt SQL alle Spalten aus beiden Tabellen in der gleichen Zeile, die employee_id = 1234 entspricht. Sie können nun verschiedene Spalten in der SELECT-Klausel auswählen, als ob sie sich in der gleichen/einzigen Tabelle befinden (was vor dem Beitritt nicht der Fall war). Dies ist die Hauptlogik hinter SQL-Joins.

Als Ihre zweite Aufgabe, versuchen Sie die folgende Abfrage. Ich habe einige Änderungen in der Aggregation vorgenommen, indem ich COUNT(DISTINCT s.employees_id) eingeführt habe. Wenn das gleiche employees_id zweimal aus irgendeinem Grund vorhanden ist, möchten Sie das immer noch als eine Person zählen.

SELECT d.department_name, avg(s.salary), max(s.salary), count(distinct s.employees_id) 
FROM employees s 
INNER JOIN departments d 
on e.employees_id = d.departments_id 
GROUP BY d.department_name 
HAVING COUNT(DISTINCT s.employees_id) > 1; 

Lassen Sie mich wissen, wenn es noch ein Problem gibt. Hoffentlich funktioniert das.

+0

danke für Ihre Hilfe! Die erste ist in Ordnung, aber die zweite nein :(Ich empfange "SQL-Befehl nicht ordnungsgemäß beendet." Einfach; doesn; t Arbeit :( –

+0

Ich habe nur ein paar Bearbeitungen (am Ende von Abfragen und hinzugefügt Anzahl (distinct s.employees_id) in Select-Klausel. – Vashi