1. 程式人生 > >MySQL資料庫學習06-查詢資料:排序和分組

MySQL資料庫學習06-查詢資料:排序和分組

一、對查詢結果排序
MySQL中可以使用ORDER BY子句對查詢到的結果進行排序。
1.單列排序
a.查詢f_name欄位,按照字母排序
這裡寫圖片描述
2.多列排序
ORDER BY子句也可以實現對多列資料進行排序,需要將待排序的列之間用逗號隔開。對多列排序是先對第一列進行排序,如果第一列有重複的值則對第一列相同值的記錄按第二列排序;如果第一列所有值都是唯一的,則不會對第二列進行排序。
a.對水果價格進行排序,價格相同的按照字母排序
這裡寫圖片描述
3.指定排序方向
預設情況按升序(ASC)排序,也可以通過關鍵字DESC實現降序排序。
這裡寫圖片描述
二、對查詢結果進行分組
MySQL中可以使用GROUP BY關鍵字對查詢到的結果進行分組。格式為:

GROUP BY 欄位 HAVING 條件表示式

1.建立分組
GROUP BY關鍵字通常和集合函式一起使用,如:MAX()、MIN()、COUNT()、SUM()、AVG()。把資料分為多個邏輯組,並對每個組進行集合計算。
a.根據s_id對fruits表中的資料進行分組,並統計每組個數
這裡寫圖片描述
b.根據s_id對fruits表中的資料進行分組,並顯示每組中的水果名稱
這裡寫圖片描述
·GROUP_CONCAT()函式用來將每個分組中各個欄位的值顯示出來。
2.使用HAVING過濾分組
GROUP BY 可以和HAVING一起使用來限定顯示記錄所需滿足的條件。
a.根據s_id對fruits表中的資料進行分組,只顯示種類大於1的分組資訊
這裡寫圖片描述


·HAVING和WHERE關鍵字都是用來過濾資料的。HAVING在資料分組之後進行過濾來選擇分組;而WHERE是在分組之前過濾資料來選擇記錄。另外WHERE排除的記錄不包括在分組中。
3.在GROUP BY子句中使用WITH ROLLUP
WITH ROLLUP 關鍵字在所有查詢出的分組記錄之後增加一條記錄,該記錄計算查詢出的所有記錄的總和,即統計記錄數量。
a.根據s_id對fruits表中的資料進行分組,並顯示記錄數量和每組數量。
這裡寫圖片描述
·通過使用WITH ROLLUP關鍵字在顯示結果最後面新添加了一行,該行Total列的值正好是上面所有數值之和。
4.多欄位分組
GROUP BY可以對多個欄位進行分組,GROUP BY關鍵字後面跟需要分組的欄位,MySQL根據多欄位的值進行層次分組,分組層次從左到右,即先按第1個欄位分組,然後在第1個欄位值相同的記錄中根據第2個欄位的值進行分組…以此類推。
a.根據s_id和f_price對fruits表中資料進行分組
這裡寫圖片描述

5.GROUP BY和ORDER BY一起使用
GROUP BY和ORDER BY一起使用可以完成對分組的排序。
a.建立用於演示的資料表
這裡寫圖片描述
b.查詢訂單價格大於100的訂單號和總訂單價格
這裡寫圖片描述
·發現orderTotal列的總訂單價格並沒有按照一定順序顯示。
c.使用ORDER BY關鍵字按總訂單價格排序顯示結果
這裡寫圖片描述
·GROUP BY 子句按訂單號對資料進行分組,SUM()函式便可以返回總的訂單價格,HAVING子句對分組資料進行過濾,使得只返回總價格大於100的訂單,最後使用ORDER BY 子句排序輸出。
·當使用ROLL UP時不能同時使用GROUP BY!!
6.使用LIMIT限制查詢結果的數量
SELECT返回所有匹配的行,有的可能是表中所有的行,如果僅僅需要返回第一行或者前幾行,使用LIMIT關鍵字,基本語法格式如下:

LIMIT 位置偏移量, 行數

或者

LIMIT 位置偏移量 OFFSET 行數

“位置偏移量”是可選引數,指示MySQL從哪一行開始顯示,不指定預設為從第一條開始(偏移量0);“行數”指示返回記錄的條數。

a.查詢第4個記錄開始,到第七個記錄
這裡寫圖片描述