Rolf B: SQL Select in Select (oder 2x Count in einem SQL)

Beitrag lesen

Hallo dedlfix,

er hat das s ja nur nicht kopiert; im Code-Beispiel steht likes. Sein Kopierer scheint ein Loch zu haben, da sind noch mehr Buchstaben durchgeflutscht.

Hallo portseven,

die Meldung müsste eigentlich ETWAS aufschlussreicher sein, aber zum Prinzip von SQL folgendes: COUNT ist eine Aggregat-Funktion. Solche Funktionen laufen über alle Sätze, für die die GROUP BY Klausel den gleichen Wert ergibt. Bei Dir also alle Sätze mit gleichem Wert für u_post.p_id.

Setzt man GROUP BY ein, hat man im SELECT zwei Möglichkeiten. Entweder man verwendet Spalten, die im GROUP BY benannt sind (weil es für die einen eindeutigen Wert gibt), oder man wendet eine Aggregatfunktion auf andere Spalten an. Folgendes Statement ist nicht erlaubt:

SELECT foo, bar, COUNT(baz)
FROM tabloid
GROUP BY foo

weil der GROUP BY sagt: Liefere mir eine Zeile pro gefundenem Wert von foo; und es ist ja möglich, dass es zwei Zeilen gibt, wo foo gleich ist aber bar nicht. Du hast also keinen eindeutigen Wert für bar. Deswegen ist das falsch.

Das hier ist korrekt:

SELECT foo, bar, COUNT(baz)
FROM tabloid
GROUP BY foo, bar

Bei Dir ist das nur lästig, weil Du eine Menge Spalten selektierst. Die müssten alle im GROUP BY stehen, damit COUNT funktioniert.

Ob ein Subselect SINNVOLL ist, muss man schauen. Was willst Du zählen? Alle Likes, die ein Benutzer abgesetzt hat, oder alle Likes, die ein Kommentar bekommen hat?

Rolf

--
sumpsi - posui - clusi