這是我的查詢:在GROUP使用SELECT'd Case語句的COLUMNNAME BY
SELECT d.DeptName, CASE WHEN e.WorkCity is NULL THEN 'Mobile'
ELSE 'Stationary'
END AS EmpType,
AVG(e.MonthlyPayScale) AS AvgMnthPay
FROM Department d, Employee e
WHERE d.DeptId = e.DeptId
GROUP BY d.DeptName, EmpType
ORDER BY d.DeptName, EmpType
這是我的輸出,這似乎是正確的:
deptname | emptype | avgmnthpay
----------+------------+------------------------
EvanDept | Mobile | 7500.0000000000000000
MaxDept | Stationary | 11250.0000000000000000
PaulDept | Mobile | 5000.0000000000000000
PaulDept | Stationary | 12500.0000000000000000
(4 rows)
它通過部門名稱和移動組/固定員工,並計算每個組員工的平均月薪。
據我瞭解,雖然,這是SQL查詢的順序:
FROM
WHERE
GROUP BY
SELECT
ORDER BY
所以GROUP BY語句發生 SELECT語句前。那麼,爲什麼:
GROUP BY d.DeptName,的empType
知道有關的empType任何東西,這是在SELECT語句中的CASE語句聲明?
所以基本上,爲什麼做我的代碼工作時GROUP BY前評估SELECT?
我的SQL [擴展了'GROUP BY'子句](http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html)在一個方式的數量,這是其中之一(在頁面的底部鏈接)。我不知道MySQL查詢編譯的內部工作原理,所以雖然你所說的操作順序是正確的,(雖然缺少'HAVING'),但我無法準確解釋擴展工作的原因。 – GarethD
使用的標記dbms。涉及到GROUP BY時,MySQL和Postgresql有很大不同。 – jarlh
一般提示(獨立於dbms):'GROUP BY d.DeptName,e.WorkCity'。 – jarlh