Zde je pořadí, jak se věci provádějí v databázovém stroji.
Všimněte si, že toto je sémantický pohled na to, jak se věci provádějí, databáze může dělat věci v jiném pořadí, ale musí produkovat výsledky, jako by to bylo děláno tímto způsobem.
- Nejprve se vyhodnotí část FROM, odkud získám data
- Poté se vyhodnotí část WHERE, které řádky nás zajímají
- Poté se vyhodnotí GROUP BY-část, jak zkombinujeme výsledné řádky
- Poté se vyhodnotí část HAVING, které skupiny nás zajímají
- Potom se vyhodnotí ORDER BY-part, jaké pořadí chceme tyto řádky/skupiny
- Nakonec se vyhodnotí část SELECT, které sloupce nás zajímají
Některé databázové stroje vám to však umožňují obejít vyslovením „GROUP BY 2“ pro seskupení podle 2. sloupce v části SELECT, ale pokud se budete držet výše uvedeného pořadí, už byste měli vědět, že důvod, proč váš kód nevyhovuje Nefunguje to tak, že zde nejsou žádné sloupce s názvy total nebo total2 (zatím).
Jinými slovy, musíte buď zopakovat dva výrazy, nebo najít jiný způsob, jak to udělat.
Co můžete udělat, je použít dílčí dotaz (za předpokladu, že používáte verzi MySQL, která toto podporuje):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Zbytek škrtněte podle komentáře.
O MySQL toho ale moc nevím, takže možná budete muset použít alias poddotazu:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Některé databázové stroje také zakazují použití klíčového slova AS při vytváření aliasů poddotazů, takže pokud výše uvedené nefunguje, zkuste toto:
...
FROM tablename
) x
^
|
+-- add this