Stel je voor, je hebt een query die gebruik maakt van één of meerdere aggregate functies waaraan je vervolgens met behulp van AS een alias aan koppelt. Echter het resultaat van deze aggregates heb je nodig in je resultaatset en je wilt er mee rekenen en aan het resultaat van de berekening nog een alias koppelen.

Een voorbeeld om het bovenstaande te verduidelijken kan geen kwaad, om het makkelijker te maken doen we in het voorbeeld ook nog een JOIN tussen twee tabellen. Deze JOIN is echter niet persé nodig om dit voorbeeld van toepassing te laten zijn.

SELECT COUNT(DISTINCT tabel1.kolom1) AS disKol1, SUM(tabel2.kolom1) sumKol2, disKol1*sumKol2 AS score FROM tabel1, tabel2 WHERE tabel1.id = tabel2.id ORDER BY score DESC

Het resultaat van deze query is niet erg enerverend, namelijk de foutmelding (reference to group function) . Geen success dus. Net voordat ik het op wilde geven kwam ik via google op de meest simpele oplossing waarvan ik tot op heden niet begrijp dat ik hem zelf niet heb verzonnen en dat is natuurlijk niet de aliassen gebruiken. In plaats daarvan gewoon het aggregate statement herhalen zo dus:

SELECT COUNT(DISTINCT tabel1.kolom1) AS disKol1, SUM(tabel2.kolom1) sumKol2, COUNT(DISTINCT tabel1.kolom1)*SUM(tabel2.kolom1) AS score FROM tabel1, tabel2 WHERE tabel1.id = tabel2.id ORDER BY score DESC

Ontzettend simpel en effectief gezien het feit dat MySQL de resultaten van de functies cached en dus niet nogmaals berekend! En je dan voor te stellen dat ik al bijna helemaal opnieuw begonnen was…