morp: Abfrage welcher Wert nur 1 (2,3,...) mal vorkommt

Hallo!

Mir fehlt irgendwie gerade die passende Idee. Ich möchte aus einer Tabelle all die Werte ausgeben die nur 1 (2,3,...) mal vorkommen.

Bin ich da mit "count" auf der richtigen Spur oder total falsch?

Gruß
morp

  1. Hi,

    Mir fehlt irgendwie gerade die passende Idee. Ich möchte aus einer Tabelle all die Werte ausgeben die nur 1 (2,3,...) mal vorkommen.

    Bin ich da mit "count" auf der richtigen Spur oder total falsch?

    Ich gehe mal von einer SQL aus.
    COUNT ist schonmal gut, aber zusätzlich brauchst du noch HAVING.

    mfG,
    steckl

    1. Hallo,

      Mir fehlt irgendwie gerade die passende Idee. Ich möchte aus einer Tabelle all die Werte ausgeben die nur 1 (2,3,...) mal vorkommen.

      Bin ich da mit "count" auf der richtigen Spur oder total falsch?

      COUNT ist schonmal gut, aber zusätzlich brauchst du noch HAVING.

      Dein Beitrag ist fachlich richtig, die verlinkte Ressource eine Katastrophe und nicht empfehlenswert. GROUP BY ist *nicht optional*, sondern zwingend vorgeschrieben (außer bei der kaputten MySQL-Implementierung, die für genug Ärger sorgt).

      Viel besser ist Danielas Artikel in SELFHTML aktuell:
      Datensätze gruppieren mit SQL.

      Freundliche Grüße

      Vinzenz

      1. Hallo!

        Besten Dank schon mal für die Antworten, leider fehlt mich noch der letzet Anstoß, bin leider blutiger Anfänger...

        Also, ich habe in etwa folgende Tabelle (tbl_lage)

        ID; xx
        1;  1
        1;  2
        1;  4
        2;  1
        2;  3
        2;  4
        3;  1
        3;  3
        3;  4

        Als Antwort möchte ich einfach die '2' haben, da es der einzige Wert ist der nur einmal vorkommt (oder eben die '3' da nur sie genau zweimal vorkommt).

        Und statt  '2' oder '3' noch besser die dazugehörige Beschreibung die wiederrum in einer anderen Tabelle (tbl_Gegenstand) steht.

        Wie gesagt, leider bekomme ich die korrekte mySQL Abfrage nicht hin.

        Vielen Dank!

        morp

        1. Was für Früchte haben denn deine Bemühungen bisher hervorgebracht, sprich: Was für SQL hast du denn bisher produziert?

          Ciao, Frank

        2. Hallo,

          Also, ich habe in etwa folgende Tabelle (tbl_lage)

          ID; xx
          1;  1
          1;  2
          1;  4
          2;  1
          2;  3
          2;  4
          3;  1
          3;  3
          3;  4

          Als Antwort möchte ich einfach die '2' haben, da es der einzige Wert ist der nur einmal vorkommt (oder eben die '3' da nur sie genau zweimal vorkommt).

          Du möchtest also folgendes:

          Gib mir die Werte
              der Spalte xx und
              die Anzahl, wie oft dieser Wert vorkommt

          Es ist klar, dass es für jeden Wert der Spalte xx nur einen Datensatz geben darf (Du willst ja nicht dreimal angezeigt bekommen, dass der Wert 4 dreimal vorkommt). Somit kommen wir zu:

          SELECT               -- Gib mir die Werte  
              xx,              -- der Spalte xx und  
              COUNT(xx) Anzahl -- die Anzahl, wie oft dieser Wert vorkommt  
          GROUP BY             -- und nur eine Zeile für jeden unterschiedlichen Wert  
              xx               -- der Spalte xx  
          
          

          Mit der HAVING-Klausel die gewünschten Zeilen auszufiltern, dürfte Dir nicht schwer fallen, dafür hast Du bereits Links auf erläuternde Artikel erhalten.

          Und statt  '2' oder '3' noch besser die dazugehörige Beschreibung die wiederrum in einer anderen Tabelle (tbl_Gegenstand) steht.

          Dazu benötigst Du einen Join. Lesetipps zu Joins habe ich selbstverständlich auch, schließlich haben wir in SELFHTML aktuell gleich zwei Artikel dazu:

          - Einführung in Joins
           - Fortgeschrittene Jointechniken

          Freundliche Grüße

          Vinzenz

          1. Hallo Ingrid,

            Also, ich habe in etwa folgende Tabelle (tbl_lage)

            die Du vergessen hast ;-)

            Du möchtest also folgendes:

            Gib mir die Werte
                der Spalte xx und
                die Anzahl, wie oft dieser Wert vorkommt

            aus der Tabelle
                  tbl_lage

            So ist's besser.

            Es ist klar, dass es für jeden Wert der Spalte xx nur einen Datensatz geben darf (Du willst ja nicht dreimal angezeigt bekommen, dass der Wert 4 dreimal vorkommt). Somit kommen wir zu:

            SELECT               -- Gib mir die Werte  
                xx,              -- der Spalte xx und  
                COUNT(xx) Anzahl -- die Anzahl, wie oft dieser Wert vorkommt  
            FROM                 -- aus der Tabelle  
                tbl_lage         -- tbl_lage  
            GROUP BY             -- und nur eine Zeile für jeden unterschiedlichen Wert  
                xx               -- der Spalte xx  
            
            

            Und die Moral von der Geschicht': Poste ungetesten Code nicht ...

            Freundliche Grüße

            Vinzenz

        3. yo,

          Und statt  '2' oder '3' noch besser die dazugehörige Beschreibung die wiederrum in einer anderen Tabelle (tbl_Gegenstand) steht.

          sieht wohl so aus, als wenn du unterabfragen anstelle von GROUP BY und HAVING brauchst. welches dbms und welche version verwendest du den, welche tabellen sollen da alle mit rein und wie genau sehen die tabellen aus ?

          Ilja

      2. yo Vinz,

        Dein Beitrag ist fachlich richtig, die verlinkte Ressource eine Katastrophe und nicht empfehlenswert. GROUP BY ist *nicht optional*, sondern zwingend vorgeschrieben (außer bei der kaputten MySQL-Implementierung, die für genug Ärger sorgt).

        der beitrag ist ganz ok, group by ist optional, probier es aus. in aller regel wollen die meisten auch mehr spalten ausgeben, als nur die der gruppierung, desegen werden wohl unterabfragen zum tragen kommen, aber das ist offen, was genau er sucht.

        Ilja

        1. Mahlzeit Ilja,

          group by ist optional, probier es aus.

          In welchem Datenbanksystem mit welcher Version?

          MfG,
          EKKi

          --
          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
          1. In welchem Datenbanksystem mit welcher Version?

            Oracle 10g

            Ilja

            1. Mahlzeit Ilja,

              In welchem Datenbanksystem mit welcher Version?

              Oracle 10g

              Tabelle:
              ID | Nachname | Vorname
              ---+----------+--------
              ...

              SELECT t.Nachname  
              ,      COUNT(t.ID) AS Anzahl  
                FROM Tabelle t
              

              ORA-00937: keine Gruppenfunktion für Einzelgruppe

              SELECT t.Nachname  
              ,      t.Vorname  
              ,      COUNT(t.ID) AS Anzahl  
                FROM Tabelle t  
               GROUP BY t.Nachname
              

              ORA-00979: Kein GROUP BY-Ausdruck

              SELECT * FROM v$version

              Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bi

              Und jetzt behaupte bitte noch einmal, dass es NICHT notwendig ist, innerhalb der GROUP BY-Anweisung alle Spalten anzugeben, die nicht durch irgendeine Gruppierungs- oder Aggregatsfunktion behandelt werden ...

              MfG,
              EKKi

              --
              sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
              1. Hello,

                Und jetzt behaupte bitte noch einmal, dass es NICHT notwendig ist, innerhalb der GROUP BY-Anweisung alle Spalten anzugeben, die nicht durch irgendeine Gruppierungs- oder Aggregatsfunktion behandelt werden ...

                ich misch mich ungerne ein, aber war die Aussage nicht lediglich, dass HAVING kein GROUP BY erfordert?

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                Don't lick your wounds: celebrate them. The scars you bear are the signs of a competitor.  --  character Richard Webber on Grey's Anatomy: 'Where the wild things are'
                1. yo,

                  ich misch mich ungerne ein, aber war die Aussage nicht lediglich, dass HAVING kein GROUP BY erfordert?

                  genauso ist es Rouven. ich denke mal er hat es mit dem mysql bug durcheinander gebracht, spalten innerhalb einer gruppierung anzeigen zu können, die nicht in der grup by klausel enthalten sind und keine aggregat-funktion verwenden. aber das ist in diesem thread nicht das thema, sondern das man HAVING auch ohne GROUP BY klausel verwenden kann.

                  Ilja