(mysql基礎)排序+聚合函數+groupby分組查詢+having+limit 用法


一、SQL 語句進行排序

ORDER BY 子句,可以將查詢出的結果進行排序(排序只是顯示方式,不會影響數據庫中數據的順序)

SELECT 字段名 FROM 表名 WHERE 字段= ORDER BY 字段名 [ASC|DESC];

ASC: 升序,默認值

DESC: 降序

1.1 單列排序:

只按某一個字段進行排序,單列排序。

select * from student order by score desc;

1.2 組合排序:

同時對多個字段進行排序,如果第 1 個字段相等,則按第 2 個字段排序,依次類推。

組合排序的語法:SELECT 字段名 FROM 表名 WHERE 字段= ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];

--查詢所有的數據 按照分數倒敘最高在最前面,年齡相同按照年紀正序,年齡越小在越前面

select * from student order by score desc , age asc;

二、聚合函數

max(列名) 求這一列的最大值

min(列名) 求這一列的最小值

avg(列名) 求這一列的平均值

count(列名) 統計這一列有多少條記錄

sum(列名) 對這一列求總和


語法:SELECT 聚合函數(列名) FROM 表名

-- 查詢學生總數

select count(id) as 總人數 from student;

select count(*) as 總人數 from student;

對於 NULL 的記錄不會統計,建議如果統計個數則不要使用有可能為 null 的列,但如果需要把 NULL也統計進去呢?

-- 查詢 id 字段,如果為 null,則使用 0 代替

select ifnull(id,0) from student;

我們可以利用 IFNULL()函數,如果記錄為 NULL,給個默認值,這樣統計的數據就不會遺漏

select count(ifnull(id,0)) from student;

三、SQL 語句進行分組查詢

分組查詢是指使用 GROUP BY 語句對查詢信息進行分組,相同數據作為一組

語法:SELECT 字段 1,****字段 2... FROM 表名 GROUP BY 分組字段 [HAVING 條件****];

3.1 GROUP BY 怎么分組的?

將分組字段結果中相同內容作為一組,如按性別將學生分成 2 組。

GROUP BY 將分組字段結果中相同內容作為一組,並且返回每組的第一條數據,所以單獨分組沒什么用處。分組的目的就是為了統計,一般分組會跟聚合函數一起使用。

-----例子1: 按性別進行分組,求男生和女生數學的平均分(實際上是將每組的 score 求了平均,返回每組統計的結果)

注意:當我們使用某個字段分組,在查詢的時候也需要將這個字段查詢出來,否則看不到數據屬於哪組的

select sex, avg(score) from student group by sex;

------例子2:查詢男女各多少人

select sex, count(*) from student group by sex;

------例子3:查詢年齡大於 25 歲的人,按性別分組,統計每組的人數

**select sex, count(*) from student where age > 25 group by sex ; **

------ 例子4:查詢年齡大於 25 歲的人,按性別分組,統計每組的人數,並只顯示性別人數大於 2 的數據

只有分組后人數大於 2 的這組數據顯示出來

**select sex, count() from student where age > 25 group by sex having count()>2 ; **

3.2 having 與 where 的區別

where 子句 :

  1. 對查詢結果進行分組前,將不符合 where 條件的行去掉,即在分組之前過濾數據,即先過濾

再分組。

  1. where 后面不可以使用聚合函數

having 子句:

  1. having 子句的作用是篩選滿足條件的組,即在分組之后過濾數據,即先分組再過濾。

  2. having 后面可以使用聚合函數

題目:select product,sum(price) from orders group by product where sum(price) > 30;

運行有誤,group by 后面不能出現 where,使用 having

3.3 limit 語句

LIMIT 的作用就是限制查詢記錄的條數。

LIMIT 語法格式:LIMIT offset,length;

offset:起始行數,從 0 開始計數,如果省略,默認就是 0

length: 返回的行數

-- 查詢學生表中數據,從第 3 條開始顯示,顯示 6 條。

select * from student3 limit 2,6;

LIMIT 的使用場景:

分頁:比如我們登錄京東,淘寶,返回的商品信息可能有幾萬條,不是一次全部顯示出來。是一頁顯示固定的

條數。 假設我們每頁顯示 5 條記錄的方式來分頁。

-- 如果第一個參數是 0 可以省略寫:select * from student limit 5;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM