Ето реда на това как се изпълняват нещата в машина за база данни.
Имайте предвид, че това е семантичен изглед за това как се изпълняват нещата, базата данни може да прави нещата в различен ред, но трябва да дава резултати, сякаш е направено по този начин.
- Първо се оценява FROM-частта, откъде да взема данни
- След това се оценява WHERE-частта, кои редове ни интересуват
- След това частта GROUP BY се оценява, как да комбинираме получените редове
- След това се оценява HAVING-частта, от кои групи се интересуваме
- След това се оценява частта ORDER BY, в кой ред искаме тези редове/групи
- Накрая се оценява SELECT-частта, кои колони ни интересуват
Някои машини за бази данни ви позволяват да заобиколите това, като кажете „GROUP BY 2“ за групиране по 2-ра колона в SELECT-частта, но ако се придържате към горния ред, вече трябва да знаете, че причината, поради която кодът ви не е Не работи е, че няма колони с имена total или total2 (все още).
С други думи, трябва или да повторите двата израза, или да намерите друг начин да го направите.
Това, което можете да направите, е да използвате подзаявка (при условие, че използвате версия на MySQL, която поддържа това):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
Останалото се заличава според коментара.
Не знам много за MySQL, така че може да се наложи да поставите псевдоним на подзаявката:
...
FROM tablename
) AS x
^-+^
|
+-- add this
Някои машини за бази данни също забраняват използването на ключовата дума AS при псевдонимни подзаявки, така че ако горното не работи, опитайте това:
...
FROM tablename
) x
^
|
+-- add this