In MySql Abfrage von Tabelle B die Anzahl der Datensätze aus Tabelle A die eine bestimmte Bedingung erfüllen abfragen.



  • Also ich habe vereinfacht folgende Tabellen:

    GRUPPETIER
    ----------
    Gruppennummer
    Wert1
    Wert2
    Wert3
    
    TIER
    ----------
    Tiernummer
    Gruppe
    Wert1
    Wert2
    Wert3
    

    TIER enthält Daten zu den einzelnen Tieren, unter anderem auch in welcher Gruppe es sich befindet... Geburtsdatum usw.
    GRUPPETIER enthält hingegen genauere Daten du den einzelnen Gruppen.. wieviel sie am Tag an futter bekommen usw.

    Kann ich wenn ich ein
    "Select xxx from GRUPPETIER" mache das irgendwie hinbekommen das ich neben den eigentlichen Gruppendaten auchnoch die Anzahl der Tiere aus TIER bekomme die in der Gruppe sind?
    Quasi eine Art
    "Select COUNT(TIER.tiernummer where gruppennummer = GTIER.gruppe)anzahl_tiere from GRUPPETIERE"

    Also beispielsweise wenn der Inhalt so ist:

    TIER
    --
    Tiernummer Gruppe wert1 wert2 wert3
    1           1      43    33    33
    1           1      43    33    33
    1           1      43    33    33
    1           2      43    33    33
    
    GRUPPE
    Gruppennummer wert1 wert2 wert3
    1              32    55    44
    2              22    33    33
    3              22    33    33
    

    Möchte ich eine Abfrage mit folgendem Inhalt generiert haben:

    Gruppennummer wert1 wert2 wert3 anzahl_tiere
    1              32    55    44      3
    2              22    33    33      1
    2              22    33    33      0
    

    Geht das irgendwie oder muss ich die vorher berechnen und als Zwischenwert in GRUPPETIER abspeichern?



  • SELECT gruppennummer, gt.wert1, gt.wert2, gt.wert3,COUNT(tier.tiernummer) AS anzahl_tiere
     FROM gruppentier AS gt LEFT JOIN tier ON gt.gruppennummer = tier.gruppe
     GROUP BY gt.gruppennummer
    


  • Hast du das jetzt aufm Kopf gemacht oder hast du Dreaddy's ganze Datenbank zum ausprobieren?



  • Im Prinzip aus dem Kopf - stand vor recht kurzer Zeit vor fast genau der gleichen Aufgabe 😉
    Ich hab mir aber zum nochmaligen Testen kurz die Tabellen, wie er sie hier gepostet hat angelegt 🕶



  • puh thx, das GROUP BY wars ^^ du hast grad meinem Kopf vor dem explodieren verschont 😃



  • Also das mit der Anzahl läuft jetzt super.
    Nur muss ich da nun noch einen draufsetzen =[
    Und zwar sind von "TIER" eine bestimmte Anzahle weiblich und der Rest logischerweise männlich, weshalb dort das Feld "geschlecht" drinsteht wo 1 weiblich und 0 männlich ist.
    Kann man die auchnoch irgendwie in die Abfrage reinbauen?
    COUNT(tier.geschlecht = 1) oder so?

    Also nachher muss ich das dann so haben:

    Gruppennummer wert1 wert2 wert3 anzahl_tiere weiblich maennlich
    1              32    55    44      3            2          1
    2              22    33    33      1            0          1
    2              22    33    33      0            0          0
    

    Hat jemand nochnen tip ?:D



  • Also das männlich und weiblich im Result in einer Zeile steht geht glaub nicht 🙄 - aber so, dass du eine für die männlichen und eine für die weiblichen bekommst:

    SELECT gruppennummer, gt.wert1, gt.wert2, gt.wert3, COUNT( tier.tiernummer ) AS anzahl_tiere, tier.geschlecht
     FROM gruppentier AS gt LEFT JOIN tier ON gt.gruppennummer = tier.gruppe
     GROUP BY tier.gruppe, tier.geschlecht
    


  • hmm ich hab jetz

    SELECT gruppennummer, gt.wert1, gt.wert2, gt.wert3, COUNT( tier.tiernummer ) AS anzahl_tiere, SUM(tier.geschlecht) AS tiere_weiblich, COUNT( tier.tiernummer ) - SUM(tier.geschlecht) AS tiere_maennlich ... blabla
    

    gemacht.

    Das funktioniert schonmal...
    Jetzt hab ich das nur dummerweise noch mit ein paar anderen Feldern und die stehen nicht auf 1 oder 0 sondern auf 0 oder irgendwas 😞

    Und das man ein int feld als true oder false auslesen kann hab ich noch nirgends gefunden.
    Oder geht das irgendwie?

    Also als eine Zeile MUSS das sein.... wäre jetzt zwar zu kompliziert das genau zu erklären, aber es MUSS 😃



  • Das sollte doch dann auch kein Problem sein:

    SELECT gruppennummer, gt.wert1, gt.wert2, gt.wert3, COUNT(tier.tiernummer) AS anzahl_tiere,
     SUM(tier.geschlecht = 1) AS tiere_weiblich, SUM(tier.geschlecht = 0) AS tiere_maennlich
     FROM gruppentier AS gt LEFT  JOIN tier ON gt.gruppennummer = tier.gruppe
     GROUP  BY tier.gruppe
    

    In deinem Fall könntest du dann einfach ein = 0 und ein != 0 bzw. <> 0



  • huch, das klappt ja tatsächlich mit SUM(tier.geschlecht = 1) usw... wieso klappte das vorhin nicht ^^
    oki thx, ich hoffe jetz klappt alles


Anmelden zum Antworten