Marco: Datensätze mit gleichem Inhalt in einer Spalte zählen...

Guten Morgen!

Einfache Select, update und insert-Anweisungen bekomme ich hin, aber hier brauche ich mal Hilfe:

Ich möchte innerhalb einer Tabelle meiner Datenbank Datensätze mit gleichem Inhalt in einer bestimmten Spalte zählen und diese dann sortiert ausgeben.

Die Tabelle hat die Spalten Titel, Nummer und Infos.
Die Spalte "Nummer" kann in mehreren Zeilen vorkommen, hierbei wäre dann der Titel identisch.

Mein Ziel ist es, alle Zeilen auszugeben, gruppiert nach identischer "Nummer" in absteigender Reihenfolge.

Bitte jetzt nicht über die Struktur der DB meckern, ich brauche konkrete Hilfe für diesen Ansatz:

Beispiel für die Tabellenausgabe
--------------------------------

Nummer Titel Infos Anzahl(=wie oft ein Titel mit dieser Nummer vorkam)
1234   Meier -     4
9876   Maus  -     2

"SELECT Titel, SUM(Nummer) FROM Tabelle1 GROUP BY Titel ORDER BY..."

Ich weiß, SUM hilft mir in diesem Fall nicht weiter, dann nicht die Anzahl der Treffer sondern der numerische Inhalt im Feld Nummer addiert würde.

Welcher Syntax bietet sich hier an? Bin ich mit der Group-Idee überhaupt auf dem richtigen Weg?

  1. Hi Marco!

    Die Tabelle hat die Spalten Titel, Nummer und Infos.
    Die Spalte "Nummer" kann in mehreren Zeilen vorkommen, hierbei wäre dann der Titel identisch.

    Und "Infos"? Ist das dann auch identisch?

    Bitte jetzt nicht über die Struktur der DB meckern, ich brauche konkrete Hilfe für diesen Ansatz:

    Schade, die scheint mir nämlich ziemlich verkorkst zu sein. ;-)

    Beispiel für die Tabellenausgabe

    Nummer Titel Infos Anzahl(=wie oft ein Titel mit dieser Nummer vorkam)
    1234   Meier -     4
    9876   Maus  -     2

    "SELECT Titel, SUM(Nummer) FROM Tabelle1 GROUP BY Titel ORDER BY..."

    Ich weiß, SUM hilft mir in diesem Fall nicht weiter, dann nicht die Anzahl der Treffer sondern der numerische Inhalt im Feld Nummer addiert würde.

    Welcher Syntax bietet sich hier an? Bin ich mit der Group-Idee überhaupt auf dem richtigen Weg?

    Theoretisch... ich verstehe noch nicht ganz, was Du eigentlich haben willst. Warum gruppierst Du nach Titel, wenn Du eigentlich nach Nummer gruppieren willst?
    Wenn ich das richtig verstehe, ist "Anzahl" eine Art laufende Nummer für identische Spalten? Dann könntest Du Nummer, Titel und max(Anzahl) selektieren und nach Nummer und Titel gruppieren. Ansonsten könntest du statt max(Anzahl) auch count(*) nehmen.

    mfG
    Benjamin

    --
    For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks.
    1. Hallo!

      Und "Infos"? Ist das dann auch identisch?

      Ja, Infos ist dann auch identisch.

      Theoretisch... ich verstehe noch nicht ganz, was Du eigentlich haben willst. Warum gruppierst Du nach Titel, wenn Du eigentlich nach Nummer gruppieren willst?

      Es soll ja nach Häufigkeit der Zeilen mit derselben "Nummer" im Feld "Nummer" sortiert werden, wobei halt nicht jeder Datensatz mit derselben Nummer ausgegeben werden soll, sondern jeweils nur einmal.
      Das Feld "Anzahl" existiert nicht, es soll letztlich (wie im Tabellenbeispiel sichtbar) nur die Anzahl der entsprechenden Treffer ausgeben, sprich, Zeilen mit dem Titel Müller und derselben Nummer gibt es x-Mal.

      Gruß, Marco

      1. Hi Marco!

        Es soll ja nach Häufigkeit der Zeilen mit derselben "Nummer" im Feld "Nummer" sortiert werden, wobei halt nicht jeder Datensatz mit derselben Nummer ausgegeben werden soll, sondern jeweils nur einmal.
        Das Feld "Anzahl" existiert nicht, es soll letztlich (wie im Tabellenbeispiel sichtbar) nur die Anzahl der entsprechenden Treffer ausgeben, sprich, Zeilen mit dem Titel Müller und derselben Nummer gibt es x-Mal.

        In dem Fall ist count(*) Dein Freund. ;-) Also ungefähr so:

        select nummer, titel, infos, count(*)  
        from tabelle  
        group by nummer, titel, infos  
        order by 4 DESC
        

        mfG
        Benjamin

        --
        For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks.