1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Abfrage - Problem mit Having Bedingung

  • Raytheon
  • 7. Dezember 2012 um 16:36
  • Unerledigt
  • Raytheon
    2
    Raytheon
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 7. Dezember 2012 um 16:36
    • #1

    Hallo,

    folgende Aufgabenstellung in SQL (Oracle):
    An welchen Wochentagen wurden die meisten Mitarbeiter geboren?
    Ausgegeben sollen folgende Spalten werden: der Wochentag und die Anzahl der Geburten!

    Den SQL Code haben ich schon, nur fehlt mir die entsprechene Having Bedingung:
    SELECT to_char(M_GEBDAT, 'DAY'), count(to_char(M_GEBDAT, 'DAY')) AS Anzahl
    FROM Mitarbeiter
    group by to_char(M_GEBDAT, 'DAY');

    Die Abfrage gibt mir jetzt die Anzahl der Geburten pro Wochentag aus (alle). Aber ich benötige nur die Zeile mit den meisten Geburten(Anzahl) und den Wochentag.

    mein Vorschlag für die Having Bedinung wäre:
    Having to_char(M_GEBDAT, 'DAY') = max(to_char(M_GEBDAT, 'DAY'))

    Bei mir ist hier leider noch der Knoten drinnen...

    Danke schon mal!

    BG
    Ray

  • Paulchen
    1
    Paulchen
    Gast
    • 7. Dezember 2012 um 16:48
    • #2
    Zitat von Raytheon

    Having to_char(M_GEBDAT, 'DAY') = max(to_char(M_GEBDAT, 'DAY'))


    Nein, das geht so nicht. Da muss eine Unterabfrage her, die eine einzelne Spalte ausgibt, die für jeden Wochentag die Anzahl der an diesem Wochentag geborenen Mitarbeiter enthält. Und für jede der in der äußeren Abfarge durch GROUP BY entstehenden Gruppen muss dann, damit diese Gruppe im Ergebnis enthalten ist, die Anzahl größer oder gleich aller in der Unterabfrage selektierten Anzahlen sein:

    Having count(to_char(M_GEBDAT, 'DAY')) >= ALL(...)

  • Raytheon
    2
    Raytheon
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 7. Dezember 2012 um 17:21
    • #3

    Ok, danke für die Erklärung.

    Als Having Bedinung hätte ich jetzt dann folgendes genommen:
    Having count(to_char(M_GEBDAT, 'DAY')) >= ALL (SELECT count(to_char(M_GEBDAT,'DAY')) FROM Mitarbeiter);

    funktioniert aber leider nicht (keine Ausgabe). Irgendwo ist noch der Knoten drinnen...

  • Paulchen
    1
    Paulchen
    Gast
    • 7. Dezember 2012 um 18:48
    • #4
    Zitat von Raytheon

    funktioniert aber leider nicht (keine Ausgabe). Irgendwo ist noch der Knoten drinnen...

    Ja, das ist offensichtlich. Deine Unterabfrage ermittelt die Gesamtanzahl der Mitarbeiter, nicht die Anzahl der an jedem Wochentag geborenen Mitarbeiter.

  • Raytheon
    2
    Raytheon
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 7. Dezember 2012 um 18:59
    • #5

    ok, hab den Fehler gefunden:
    Having count(to_char(M_GEBDAT, 'DAY')) >= ALL (SELECT count(to_char(M_GEBDAT,'DAY')) FROM Mitarbeiter group by to_char(M_GEBDAT,'DAY'));

    So eine Kleinigkeit kostet so viel Zeit...ärgerlich...

    Danke für die Unterstützung!

  • Raytheon
    2
    Raytheon
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 7. Dezember 2012 um 22:43
    • #6

    Hallo,
    darf ich dich noch was fragen? Ich brauch wieder einen Denkanstoß!

    Aufgabe:
    Alle Mitarbeiter eines Unternehmens haben einen Test (Benotung: 1-5) durchführen müssen. Gib die Abteilungen mit den entsprechenden Notendurchschnitt aus!

    Hier mein Versuch:
    SELECT DISTINCT(Abteilungen.A_ID) AS Abteilungen, AVG(Tests.T_NOTE) as Durchschnitt
    FROM Mitarbeiter left join Tests
    ON M_NR = Testkandidat_nr,
    Mitarbeiter m right join Abteilungen a
    on m.M_Abteilung = a.A_ID, Abteilungen
    Group by Abteilungen.A_ID
    Having AVG(Tests.T_NOTE) = (SELECT AVG(Tests.T_NOTE) FROM Mitarbeiter left join Tests
    ON M_NR = Testkandidat_nr group by Mitarbeiter.M_Abteilung);

    Ohne der Having Bedingung, bekomme ich bei den 3 Abteilungen den selben Durchschnittswert angezeigt.

    Danke

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung