Matroids Matheplanet Forum Index
Moderiert von Bilbo matph
Matroids Matheplanet Forum Index » Informatik » SQL-Befehle : Umsatz berechnen
Autor
Universität/Hochschule SQL-Befehle : Umsatz berechnen
mathletic
Aktiv Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: im letzten Quartal
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 Letzter Besuch: im letzten Quartal
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.

Wechsel in ein anderes Forum:
 Suchen    
 
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]