|
Autor |
SQL-Befehle : Umsatz berechnen |
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Themenstart: 2022-01-25
|
Hallo,
ich gucke folgende Aufgabe :
Es seien folgende Relationen einer Projektverwaltung eines Unternehmens gegeben, wobei die Primärschlüssel der jeweiligen Relationen unterstrichen sind.
https://matheplanet.com/matheplanet/nuke/html/uploads/b/38039_Relation.png
Ein Mitarbeiter kann mehreren Projekten zugeteilt sein. Weiterhin kann ein Mitarbeiter unterschiedliche Kompetenzen haben, die zu unterschiedlichen Tagessätzen abgerechnet werden. Jeder Mitarbeiter kann nur tageweise
eingesetzt werden. Die Zuordnung von Mitarbeitern zu Projekten ist in der Relation projektzuord enthalten.
Die Relationen mitarb und projekte enthalten die Stammdaten zu den vorhandenen Mitarbeitern und Projekten.
https://matheplanet.com/matheplanet/nuke/html/uploads/b/38039_projekte.png
https://matheplanet.com/matheplanet/nuke/html/uploads/b/38039_mitarb.png
https://matheplanet.com/matheplanet/nuke/html/uploads/b/38039_projektz.png
Geben Sie zur Lösung der Aufgaben im folgenden allgemeingultige SQL-Statements an. Dabei sollen die Befehle die Aufgabenstellung möglichst allgemein erfüllen, d.h., sie sollen auch auf andere Daten gleicher Form anwendbar sein. Hinweis: Sie können mit dem Datentyp DATE wie mit einem INTEGER rechnen.
1) Welche unterschiedlichen Mitarbeiter (Vorname und Name) sind dem Projekt mit dem Namen Lagerreorganisation zugeordnet?
2) Welche unterschiedlichen Mitarbeiter (Vorname und Name) liefern am meisten Umsatz? Geben Sie eine sortierte Liste aus. Der Umsatz errechnet sich aus der Anzahl der geplanten Tage multipliziert mit dem Tagessatz.
3) Welche Kompetenzen (Kompetenzbezeichnung) werden in den geplanten Projekten mindestens zweimal benötigt?
4) Wieviele Mitarbeiter mit welcher Kompetenz sind im Zeitraum vom 15.03.2022 bis zum 09.04.2022 verfügbar, das heißt, nicht in anderen Projekten gebunden?
5) Es gibt eine neues Projekt p42 mit der Bezeichnung Datenreorganisation des Kunden kn99 und einem Volumen von 12000 Euro. Diesem neuen Projekt wird die Mitarbeiterin Maier vom 01.03.2022 bis 31.05.2022 zugeordnet. Geben Sie SQL-Befehle zur Aktualisierung der Datenbank an.
Bei (1) habe ich den folgenden Befehl geschrieben :
\sourceon
SELECT m.vorname, m.name
FROM mitarb m, projektzuord z
WHERE m.mnr = z.mitarbnr AND z.projnr = p17
\sourceoff
Bei (2) habe ichfolgendes geschrieben :
\sourceon
SELECT m.vorname, m.name, MAX(DATEDIFF(day, z.datumbis, z.datumvon) * m.tagesastz)
FROM mitarb m, projektzuord z
WHERE m.mnr = z.mitarbnr AND m.kompetenz = z.kompetenz
\sourceoff
Kann man so den Umsatz ausrechnen ?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 3601
 | Beitrag No.1, eingetragen 2022-01-25
|
Beide Statements sind nicht korrekt. Du ignorierst z.B. bei beiden, dass der Primärschlüssel für Mitarbeiter zweiteilig ist (Mitarbeiternummer und Kompetenz). Beim ersten gibst du nicht, wie gefordert, den Namen des Projektes vor, sondern verwendest die Projektnummer. Beim zweiten Statement leistet das MAX sicher nicht das, was du dir erhoffst.
Unabhängig von diesen Punkten würde ich dir dazu raten, Joins explizit als Join hinzuschreiben und nicht einfach die Tabellen nach dem FROM aufzuzählen und die Join-Bedingungen ins WHERE zu packen.
In der Aufgabe sind nicht ohne Grund Beispieldaten angegeben. Erstelle dir eine Datenbank mit den Beispieldaten und probiere deine Statements auf dieser Grundlage einfach aus. Dann siehst du sofort deine Fehler und kannst sie reparieren.
--zippy
|
Profil
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Beitrag No.2, vom Themenstarter, eingetragen 2022-01-25
|
\quoteon(2022-01-25 11:25 - zippy in Beitrag No. 1)
Beide Statements sind nicht korrekt. Du ignorierst z.B. bei beiden, dass der Primärschlüssel für Mitarbeiter zweiteilig ist (Mitarbeiternummer und Kompetenz). Beim ersten gibst du nicht, wie gefordert, den Namen des Projektes vor, sondern verwendest die Projektnummer. Beim zweiten Statement leistet das MAX sicher nicht das, was du dir erhoffst.
Unabhängig von diesen Punkten würde ich dir dazu raten, Joins explizit als Join hinzuschreiben und nicht einfach die Tabellen nach dem FROM aufzuzählen und die Join-Bedingungen ins WHERE zu packen.
In der Aufgabe sind nicht ohne Grund Beispieldaten angegeben. Erstelle dir eine Datenbank mit den Beispieldaten und probiere deine Statements auf dieser Grundlage einfach aus. Dann siehst du sofort deine Fehler und kannst sie reparieren.
--zippy
\quoteoff
Um die Spalten der Relationen zu kreieren scheibt man folgendes ?
\sourceon
CREATE TABLE mitarb (
mnr INTEGER
name CHAR(225)
vorname CHAR(225)
kompetenz CHAR(225)
kompbez CHAR(225)
tagessatz INTEGER
);
CREATE TABLE projekte (
projnr INTEGER
projektbez CHAR(225)
kundennr INTEGER
volumen INTEGER
);
CREATE TABLE projektzuord (
projnr INTEGER
mitarbnr INTEGER
kompetenz CHAR(225)
datumvon DATE
datubis DATE
);
\sourceoff
Ich bekomme aber die Meldung :
ERROR: syntax error at or near "name"
Position: 41
Ich sehe da kein Fehler. Was ist gemeint ?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 3601
 | Beitrag No.3, eingetragen 2022-01-25
|
\quoteon(2022-01-25 11:53 - mathletic in Beitrag No. 2)
Ich sehe da kein Fehler. Was ist gemeint ?
\quoteoff
Das Ergebnis einer Suche nach "create table" hätte dir gezeigt: Da fehlen etliche Kommata.
|
Profil
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Beitrag No.4, vom Themenstarter, eingetragen 2022-01-25
|
Schreiben wir bei (1) den folgenden Befehl ?
\sourceon
SELECT DISTINCT m.vorname, m.name
FROM mitarb m, projektzuord z, projekte p
WHERE m.mnr = z.mitarbnr AND p.projektbez = 'Lagerreorganisation' AND p.projnr = z.projnr
\sourceoff
Das Ergebnis ist richtig!
|
Profil
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Beitrag No.5, vom Themenstarter, eingetragen 2022-01-25
|
Bei (2) berechnet man die Anzahl der Tage mit den Befehl :
DATEDIFF(day, z.datumbis, z.datumvon)
?
|
Profil
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Beitrag No.6, vom Themenstarter, eingetragen 2022-01-25
|
Bei (3) benutzt man folgende Befehle ?
\sourceon
SELECT p.projektbez
FROM projektzuord z, projekte p
GROUP BY p.projektbez, p.projnr
HAVING COUNT(p.projektbez)>=2 AND p.projnr = ANY (SELECT z.projnr FROM projektzuord z)
\sourceoff
Ich denke ich bekomme das richtige Ergebnis!
|
Profil
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Beitrag No.7, vom Themenstarter, eingetragen 2022-01-26
|
Bei (4) habe ich folgendes geschrieben :
\sourceon
SELECT COUNT(m.mnr), m.kompetenz
FROM projektzuord z, mitarb m
WHERE ((z.datumbis < '20220315' OR z.datumvon > '20220409') AND (m.mnr = z.mitarbnr)) OR m.mnr != ALL (SELECT z.mitarbnr FROM projektzuord z)
GROUP BY m.mnr, m.kompetenz
\sourceoff
Es kommt kein Ergebnis raus. Ist das wirklich so dass in diesen Zeitraum keine Mitarbeiter verfügbar sind ?
|
Profil
|
mathletic
Aktiv  Dabei seit: 11.11.2013 Mitteilungen: 1594
 | Beitrag No.8, vom Themenstarter, eingetragen 2022-01-26
|
Was genau bedeutet dass die Befehle die Aufgabenstellung möglichst allgemein erfüllen sollen, also dass sie auch auf andere Daten gleicher Form anwendbar sein sollen?
Schreibt man dazu folgende Befehle bei (1) ?
\sourceon
SELECT DISTINCT m.vorname, m.name
FROM mitarb m, projektzuord z, projekte p
WHERE m.mnr = z.mitarbnr AND p.projektbez = (SELECT p.projektbez FROM projekte p WHERE p.projektbez = 'Lagerreorganisation' ) AND p.projnr = z.projnr
\sourceoff
|
Profil
|
mathletic hat die Antworten auf ihre/seine Frage gesehen. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2022 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|