Jo: SQL Syntax

Hallo,
ich möchte in einer SQL-Abfrage die Anzahl der enthaltenen parentids einer Tabelle mit jedem Datensatz ausgeben:

Die Anzahl bekomme ich bisher nur mit einer GROUP BY -Anweisung:

SELECT parentid, COUNT(parentid) as "parentidsum"
FROM layer GROUP BY  parentid

Jetzt möchte ich ein SQL erzeugen, das mir jeden Datensatz der Tabelle  ausgibt und zusätzlich eine Spalte mit der jeweiligen Summe (parentidsum) der parentids. Geht das überhaupt?

Also etwa so:
SELECT id, legname,  parentid, COUNT(parentid) as "parentidsum"
FROM layer

Danke Jo

  1. Tach auch.

    ich möchte in einer SQL-Abfrage die Anzahl der enthaltenen parentids einer Tabelle mit jedem Datensatz ausgeben:

    Die Anzahl bekomme ich bisher nur mit einer GROUP BY -Anweisung:

    SELECT parentid, COUNT(parentid) as "parentidsum"
    FROM layer GROUP BY  parentid

    Das könnte so oder so ähnlich funktionieren.

    Jetzt möchte ich ein SQL erzeugen, das mir jeden Datensatz der Tabelle  ausgibt und zusätzlich eine Spalte mit der jeweiligen Summe (parentidsum) der parentids. Geht das überhaupt?

    Also etwa so:
    SELECT id, legname,  parentid, COUNT(parentid) as "parentidsum"
    FROM layer

    Wenn id, legname und parentid immer in einer einzigen Kombination vorkommen, reicht dein Code mit der Ergänzung "GROUP BY parentid, id, legname" bereits. Falls nicht, ist ein Subselect am einfachsten zu realisieren, ohne jetzt deine gesamte Tabellenstruktur zu kennen.

    Bis die Tage,
    Matti

    1. yo,

      Wenn id, legname und parentid immer in einer einzigen Kombination vorkommen, reicht dein Code mit der Ergänzung "GROUP BY parentid, id, legname" bereits.

      das geht nicht, da bei jeden COUNT(*) nur der Wert 1 durch die gruppierung rauskommen würde. Der richtige Weg ist eine korrelierte Unterabfrage, die bei mysql ab version 4.1+ geht.

      Ilja

      1. Tach auch.

        Wenn id, legname und parentid immer in einer einzigen Kombination vorkommen, reicht dein Code mit der Ergänzung "GROUP BY parentid, id, legname" bereits.

        das geht nicht, da bei jeden COUNT(*) nur der Wert 1 durch die gruppierung rauskommen würde. Der richtige Weg ist eine korrelierte Unterabfrage, die bei mysql ab version 4.1+ geht.

        In Ermangelung des Wissens seiner Tabellenstruktur kann ich nur sagen, daß deine Aussage höchstwahrscheinlich richtig ist, aber nicht bewiesen werden kann.

        Bis die Tage,
        Matti

      2. Hi,
        danke für die Antworten,

        das geht nicht, da bei jeden COUNT(*) nur der Wert 1 durch die gruppierung rauskommen würde. Der richtige Weg ist eine korrelierte Unterabfrage, die bei mysql ab version 4.1+ geht.

        ja da kommt tatsächlich immer nur 1 raus.
        Wie sieht denn so eine korrelierte Unterabfrage aus? Geht das auch mit Access? Ich greife via ADODB auf die Datenbank zu und möchte die Anwendung möglichst unabhängig von der Datenbank machen.

        Jo

        1. yo,

          Wie sieht denn so eine korrelierte Unterabfrage aus?

          SELECT t1.id, t1.legname, t1.parentid,
                (SELECT COUNT(*)
                 FROM layer t1
                 WHERE t2.parentid = t1.parentid
                ) AS "parentidCount"
          FROM layer t1
          ;

          Ilja

          1. yo,

            kleiner tippfehler, der alias-name für die tabelle in der unterabfrage muss natürlich t2 und nicht t1 sein. ja wo ist bloss die editier-funktion.....

            Ilja

            1. Hallo Ilja,

              super, besten Dank das wars!

              Gruß
              Jo