Announcement

Collapse
No announcement yet.

Mehrere COUNT() in einer Abfrage, aber wie?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere COUNT() in einer Abfrage, aber wie?

    Hallo an Alle,

    aus einer Artikeltabelle möchte ich auslesen wieviel Eintäge es für die einzelnen Attribute (Farbe, Geruch, Inhalt usw.) gibt. Die Tabelle sieht ungefähr so aus:

    ID | Artikel | Farbe | Geruch | Inhalt
    1 | Saunaaufguss | | rose | 1000 ml
    2 | Saunaaufguss | | flieder | 3000 ml
    3 | Microfasertuch | rot | |
    4 | Hölzöl | braun | | 500 ml

    Ich möchte jetzt wissen wieviele Einträge es zu dem jeweiligem Attribut gibt und wievile Artikel es insgesamt gibt. Mein Select sieht so aus:

    SELECT distict

    COUNT(*) as Artikel,
    COUNT(Farbe) as Farbe,
    COUNT(Geruch) as Geruch,
    COUNT(Inhalt) as Inhalt

    FROM dbo_artikel

    Wenn ich mir nach dem Beispiel die einzelnen Werte anzeige ist das Ergebnis immer 4, also alle Datensätze.
    Ich erwarte aber Farbe=2, Geruch=2, Inhalt=3.
    Was mache ich falsch?

    Gruß Nevada

  • #2
    4 ist korrekt denn du willst ja laut deinem SQL die eindeutigen Kombinationen aus den 4 Spalten. Wenn du eindeutige Anzahl der einzelnen Spalten willst
    dann solltest du distinct auch zu den einzelnen Spalten packen (wenn MySQL das kennt).

    [Highlight=SQL]
    SELECT COUNT(*) as Artikel,
    COUNT(distinct Farbe) as Farbe,
    COUNT(distinct Geruch) as Geruch,
    COUNT(distinct Inhalt) as Inhalt
    FROM dbo_artikel[/Highlight]

    Comment


    • #3
      Hallo Ralf,

      danke für die schnelle Antwort. Du hast mich schon mal auf den richtigen Weg gebracht, leider ist gleich das nächste Problem aufgetaucht
      Das Problem ist, das es ja auch die Kombinationen der Produkte gibt, sprich Saunaaufguss Minze kann es in 200 ml, 1000 ml, 3 l und 10 l geben.
      anders herum gibt es auch die gleichen Inhalte mit unterschiedlichen Düften wie 1000 ml Minze, 1000 ml rose, 1000 ml flieder usw.

      Da die Abfrage mir aber die gleichen Düfte als einen zusammenfasst, komme ich jetzt zwar auf die Anzahl der unterschiedlichen Düfte aber nicht wieviele Artikel es mit dem
      Attribut Duft gibt.

      Gruß René

      Comment


      • #4
        Hallo,

        also COUNT zählt prinzipiell alle NICHT-NULL Werte. D.h. wenn du bei 4 Datensätzen jeweils eine 4 bekommst obwohl nicht alle Attribute belegt sind, dann sind die nicht belegten Attribute eben NICHT NULL, sondern offensichtlich einfach ein Leerstring. Hier ist also entweder dein Datenmodell falsch und du musst das ändern und die betroffenen Felder zu NULL updaten, oder du wandelst die "Leeren" Felder während der Abfrage zu NULL um.
        [highlight=sql]
        SELECT
        COUNT(*) as Artikel,
        COUNT(NULLIF(Farbe, '')) as Farbe,
        COUNT(NULLIF(Geruch, '')) as Geruch,
        COUNT(NULLIF(Inhalt, '')) as Inhalt
        FROM dbo_artikel
        [/highlight]

        Gruß Falk

        P.S.: Formatierung von SQL in Beiträgen
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X