• Ich habe eine Datenbank mit Daten von Hunden. Jetzt möchte ich ermitteln wieviele Würfe in einem Jahr gefallen sind.

    das gibt mir das year, den kennelname und die Anzahl der Babys (anzahl):

    Code
    2004 - Zwinger A - 8 Welpen
    2004 - Zwinger B - 2 Welpen
    2004 - Zwinger C - 5 Welpen
    2004 - Zwinger A - 3 Welpen


    Gruppiere ich nach year, erhalte ich die Anzahl aller Babys in einem Jahr.

    Code
    2004 -  18 Welpen


    Soweit gut... - jetzt möchte ich die Anzahl der Würfe pro Jahr haben.
    Es kann aber sein, das zwei Würfe a.) am gleichen Tag geboren sind b.)die gleiche Mutter haben oder c.)beim gleichen Züchter geboren sind. Somit scheidet die COUNT DISCTINCT Variante aus....
    Ergebnis soll sein

    Code
    2004 -  4 Würfe
  • Ohne Kenntnis der Datenbankstruktur ist es etwas schwierig, eine gute Antwort zu liefern.

    Wie genau identifizierst du einen einzelnen Wurf? Verstehe ich richtig, dass dir das oben genannte Statement ein Resultat für jeden Wurf liefert?

    Wenn ja, wäre es wohl am einfachsten, ein VIEW aus diesem SELECT-Statement zu erstellen und dann ein einfaches COUNT auf dieses View anzuwenden, um die anzahl Würfe zu erhalten. Die erstellung des VIEWS empfiehlt sich vor allem, wenn du auch sonst noch mit Würfen arbeiten willst.

    Folgender Code könnte in etwa dem entsprechen was du willst (In der Annahme, dass dein erstes Statement sauber nach Würfen trennt):

    Code ist logischerweise ungetestet ;)

  • das Beispiel bekomme ich trotz meiner Kreativität nicht ans laufen, aktuell Fehlermeldung:mysql_query() expects at most 2 parameters, 3 given.

    Hier kann man im ersten Teil sehen, das jeder Wurf in jedem Jahr gezeigt wird (und z.B. in 2008 waren es 12 Würfe). Der Rest ist Test ;)

    Wurf wird idendifiziert mit date_of_birth_ mother_id, breeder_id
    Diese Abfrage benötige ich nur dieses eine mal für die Statistik

    Sorry, mein Internet ist heute etwas lahm und tot...


    Ufta, hat mich das Teil googeln gekostet, habe es mit allem möglichem versucht, aber nix wollte so wie ich. Über alle Möglichkeiten, das Array zu gruppieren, sortieren, zählen über etliche Funktionen...
    Aber geschafft:

    3 Mal editiert, zuletzt von TanjaP. (19. April 2013 um 13:45) aus folgendem Grund: Lösung

  • Jop, diese Abfrage macht eigentlich das selbe wie meine, einfach mit einem Subselect anstatt einem View. Ich denke du hast versucht, mein Codebeispiel oben direkt zu verwenden? Ich hatte es nicht klar gekennzeichnet, aber das waren eigentlich zwei separate statements, das erste wird nur einmal verwendet um das View zu erstellen. Dieses View kann dann verwendet werden wie eine normale Tabelle.

  • Ich bin nicht sicher, ob du das Konzept des Views wirklich verstanden hast. Das erste Statement (CREATE VIEW [...]) muss nur ein mal ausgeführt werden, wie z.B. CREATE TABLE. Danach ist das View wie eine normale Tabelle verfügbar.

    Ein View ist eigentlich eine art "Virtuelle Tabelle", welche es dir ermöglicht, ein komplexes SELECT-Statement abzuspeichern und bei späteren Ausführungen wieder zu verwenden, ohne komplexe Subselects o.ä. zu schreiben.

    Nachdem du einmal das View erstellt hast, reicht das folgende Statement, um die Anzahl würfe pro Jahr zu erhalten. Die Where-Angaben hab ich von dir übernommen und sind optional. Relevant ist eigentlich nur das SELECT COUNT(*) und das GROUP BY `year`.

    SQL
    SELECT year, COUNT(*) FROM litter
        WHERE country_short='de' 
        AND year>1996
        AND kennel_note =''
    GROUP BY year;