<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Aufgaben zur personal-Datenbank
Step1:  Welcher Mitarbeiter steht in einer alphabetisch sortierten Liste an letzter Stelle? Es sollen die Mitarbeiternummer, der Nachname und der Vorname angezeigt werden.
Step2:  Welche Mitarbeiter haben an 
welchen Projekten 
welcher Kunden
wieviele Stunden gearbeitet?                        
Zeigen sie Mitarbeiternummer (Sortierkriterium), Nachname und Vorname des Mitarbeiters, Projektnummer, Projektname, Stunden und Firma an
Step3:  Die Unternehmensleitung möchte die Summe der Monatsgehälter für jede Abteilung wissen. Die Spalten Abteilungsnummer, Abteilungsname und Summe der Monatsgehälter sollen angezeigt werden.
Step4:  Es soll das durchschnittliche Alter aller Mitarbeiter, das Alter des ältesten Mitarbeiters und Alter des jüngsten Mitarbeiters ermittelt werden. Es genügt ein Näherungswert in Jahren
Step5:  Wie viele Mitarbeiter arbeiten in der Abteilung 3?
Step6:  Alle Mitarbeiter in der Abteilung 4, die mehr verdienen als der Mitarbeiter der Abteilung 5 mit dem 
  höchsten Monatsgehalt, sind mit der Mitarbeiternummer, dem Nachnamen und dem Monatsgehalt anzuzeigen.
Step7:  Welche Mitarbeiter haben ein kleineres Monatsgehalt als das durchschnittliche Monatsgehalt aller Mitarbeiter? Nachname, Vorname und Monatsgehalt dieser Mitarbeiter sollen angezeigt werden.
Step8:  In welchen Abteilungen arbeiten mehr als vier Mitarbeiter? 
Die Abteilungsnummer und die Anzahl der Mitarbeiter sollen angezeigt werden.
Step9:  Sie wollen wissen, wieviel Kosten (Stunden * Stundensatz) bisher für das Projekt PKR aufgelaufen sind.
<ASSISTANT_TASK:>
Python Code:
%load_ext sql
%sql mysql://steinam:steinam@localhost/personal
Explanation: Aufgaben zur personal-Datenbank
End of explanation
%%sql
select MNr, MName, MVorname from Mitarbeiter 
order by MName desc limit 1;
Explanation: Welcher Mitarbeiter steht in einer alphabetisch sortierten Liste an letzter Stelle? Es sollen die Mitarbeiternummer, der Nachname und der Vorname angezeigt werden.
End of explanation
%%sql
select Mitarbeiter.MNr, MName, Stunden, Projektname, Firma
from Mitarbeiter inner join Projektbearbeitung
    on MItarbeiter.MNr  = Projektbearbeitung.MNr
    inner join Projekte
        on Projektbearbeitung.ProjNr = Projekte.ProjektNr
    inner join Kunden on Kunden.KundenNr = Projekte.KundenCode
Explanation: Welche Mitarbeiter haben an 
welchen Projekten 
welcher Kunden
wieviele Stunden gearbeitet?                        
Zeigen sie Mitarbeiternummer (Sortierkriterium), Nachname und Vorname des Mitarbeiters, Projektnummer, Projektname, Stunden und Firma an
End of explanation
%%sql
select Abteilung.AbtName, sum(Monatsgehalt)
from Abteilung inner join Mitarbeiter
    on Mitarbeiter.AbtNr = Abteilung.AbtNr
    inner join Gehalt 
        on Mitarbeiter.MNr = Gehalt.MNr
group by Abteilung.Abtname
Explanation: Die Unternehmensleitung möchte die Summe der Monatsgehälter für jede Abteilung wissen. Die Spalten Abteilungsnummer, Abteilungsname und Summe der Monatsgehälter sollen angezeigt werden.
End of explanation
%%sql
select avg((year(now()) - year(MGeburtsdatum))) from Mitarbeiter
Explanation: Es soll das durchschnittliche Alter aller Mitarbeiter, das Alter des ältesten Mitarbeiters und Alter des jüngsten Mitarbeiters ermittelt werden. Es genügt ein Näherungswert in Jahren
End of explanation
%%sql
/* geht
select count(MNr) from Mitarbeiter
where Mitarbeiter.AbtNr = 3
*/
/*
gehjt auch, weil wir wegen dem where vor dem Groupen nur noch Datensätze haben,
die die AbtNr 3 haben; dann kann das group by auch wegbleiben
select Abteilung.AbtNr, Abteilung.AbtName,  count(Mitarbeiter.MNr)
from Abteilung inner join Mitarbeiter
    on Abteilung.AbtNr = Mitarbeiter.AbtNr
    where Abteilung.AbtNr = 3
    
*/
Explanation: Wie viele Mitarbeiter arbeiten in der Abteilung 3?
End of explanation
%%sql
select Mitarbeiter.MName, Monatsgehalt 
from Mitarbeiter inner join Gehalt
on Mitarbeiter.MNr = Gehalt.MNr
where Mitarbeiter.AbtNr = 4
and MOnatsgehalt > 
(
    select max(Monatsgehalt) from Gehalt inner join Mitarbeiter
    on Mitarbeiter.MNr = Gehalt.MNr
    where Mitarbeiter.AbtNr = 5
)
Explanation: Alle Mitarbeiter in der Abteilung 4, die mehr verdienen als der Mitarbeiter der Abteilung 5 mit dem 
  höchsten Monatsgehalt, sind mit der Mitarbeiternummer, dem Nachnamen und dem Monatsgehalt anzuzeigen.
End of explanation
%%sql
select Mitarbeiter.MName, Monatsgehalt 
from Mitarbeiter inner join Gehalt
on Mitarbeiter.MNr = Gehalt.MNr
where Monatsgehalt <
(
    select avg(Monatsgehalt) from Gehalt
)
Explanation: Welche Mitarbeiter haben ein kleineres Monatsgehalt als das durchschnittliche Monatsgehalt aller Mitarbeiter? Nachname, Vorname und Monatsgehalt dieser Mitarbeiter sollen angezeigt werden.
End of explanation
%%sql
select AbtNr, count(*) as Anzahl from Mitarbeiter M
group by AbtNr
having Anzahl > 4
Explanation: In welchen Abteilungen arbeiten mehr als vier Mitarbeiter? 
Die Abteilungsnummer und die Anzahl der Mitarbeiter sollen angezeigt werden.
End of explanation
%%sql
select sum(Stundensatz * Stunden), ProjNr
from Projektbearbeitung inner join Mitarbeiter
        on Projektbearbeitung.MNr = Mitarbeiter.MNr
    inner join Stundensatz 
        on Mitarbeiter.StundensatzNr = Stundensatz.StundensatzNr
where ProjNr = 'A1'
Explanation: Sie wollen wissen, wieviel Kosten (Stunden * Stundensatz) bisher für das Projekt PKR aufgelaufen sind.
End of explanation
<END_TASK>