GROUP BY 和 ORDER BY一起使用
寫程序也有很長的一段時間了,有些東西我總不曾去思考,很少去積累一些有用的東西,總喜歡“用要即拿”的心態來對待,這是非常不好的壞習慣。這樣只會造成依賴心太強,每當遇到一些小小的問題都需要去翻資料。就好像今天寫一條查詢語句的時候,連group by 和 order by連用都不清楚,我想我以后得注意這些問題。
正確使用如下:
以下是引用片段: SELECT dep.department_name, MAX(emp.salary), MIN(emp.salary) FROM departments dep LEFT JOIN employees emp ON (dep.department_id = emp.department_id) GROUP BY dep.department_name --order by 的列,必須是出現在group by 子句里的列 ORDER BY dep.department_name DESC |
錯誤使用如下:(執行后報錯:ORA-00979:不是GROUP BY 表達式)
以下是引用片段: SELECT dep.department_name, MAX(emp.salary), MIN(emp.salary) FROM departments dep LEFT JOIN employees emp ON (dep.department_id = emp.department_id) GROUP BY dep.department_name --order by 的列,應該出現在group by 子句中 ORDER BY dep.department_id DESC |
=========================================
GROUP BY 和 ORDER BY一起使用時,ORDER BY要在GROUP BY的后面。
group by a,b,c 則a,b,c三個字段是按照先按a字段對數據行進行排序,再按b字段對那些字段a為同一個值的數據行進行排序,再再按c字段對那些字段a為同一個值且字段b為同一個值的數據行進行排序
order by a,b,c 也是如此
故而
表T 有a,b,c三個字段,按a分組再按c排序的方法如下:
select * from T order by a,c//兩個字段順序不能顛倒
或者
select * from T group by a,c//兩個字段順序不能顛倒