GROUP BY 和 ORDER BY一起使用時,ORDER BY要在GROUP BY的後面。
一、GROUP BY
GROUP BY語句用來與聚合函數(aggregate functions such as COUNT, SUM, AVG, MIN,MAX)聯合使用來得到一個或多個列的結果集。目的是將結果彙總。
語法如下:
SELECT column1, column2, ... column_n, aggregate_function (expression)
FROM tables
WHERE predicates
GROUP BY column1, column2, ... column_n;
因爲聚合函數通過作用於一組數據而只返回一個單個值,因此,在SELECT語句中出現的元素要麼爲一個聚合函數的輸入值,要麼爲GROUP BY語句的參數,否則會出錯。
他的作用就是將產生的結果分類彙總。我們測試一下,如果不加group by 會發生什麼。果然,不加group by 報錯
我們可以理解成,我group by 語法爲了顯示分組,我們按照id 進行分組,然後分別按照各個組的統計各自的記錄數量。
一般如:
select 單位名稱,count(職工id),sum(職工工資) form [某表]
group by 單位名稱
這樣的運行結果就是以“單位名稱”爲分類標誌統計各單位的職工人數和工資總額。
ORDER
BY 語句用於根據指定的列對結果集進行排序,默認按照升序對記錄進行排序。
GROUP BY 和 ORDER BY一起使用時,ORDER BY要在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 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//兩個字段順序不能顛倒。