SQL Syntax
Jo
- php
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
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
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
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
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
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
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
Hallo Ilja,
super, besten Dank das wars!
Gruß
Jo