資料庫命令詳解——資料表的排序/聚合命令/分組
阿新 • • 發佈:2020-12-05
1. 排序子句 order by
使用order by子句,對查詢結果進行排序,預設是升序
//語法
order by 指定排序的列 asc 升序、desc 降序
//舉例
select * from order_table where user_id in (1,4)
order by price; //升序排列
select * from order_table where user_id in (1,4)
order by price desc; //降序排列
說明:order by子句一般位於select語句的結尾
2. 常用聚合函式
2.1 DISTINCT 對某一列資料去重(包含Null)
//語法
SELECT DISTINCT 列名 FROM 表名 //顯示此列不重複的資料
//舉例
select distinct user_nick from user_info_table;
2.2 COUNT 統計總行數
型別 | 說明 |
---|---|
count(*) | 包括所有列,返回表中的總行數,在統計結果的時候,不會忽略列值為null的行數 |
count(1) | 包括所有列,1表示一個固定值,沒有實際含義,在統計結果的時候,不會忽略列值為null的行數,和count(*)的區別是執行效率不同 |
count(列名) | 只包括列名指定列,返回指定列的行數,在統計結果的時候,不統計列值為null的行數 |
count(distinct 列名) | 返回指定列的不重複的行數,在統計結果的時候,會忽略列值為null的行數(不包括空字串和0) |
select count(distinct user_nick)
from user_info_table; //返回指定列的不重複的行數,不統計列值為null的行數
- count(*) count(1) count(列名)執行效率比較
(1)如果列是主鍵,count(主鍵列名)優於conut(1),如果列不是主鍵,則相反
(2) 如果表中存在主鍵,count(主鍵列名)效率最優
(3)如果表中只有一列,則count()效率最優
(4)如果表有多列,且不存在主鍵,則count(1)效率優於count()
2.3 MAX/MIN最大值、最小值
Max/min函式返回滿足where條件的一列的最大/最小值
SELECT MAX(列名) FROM 表名; //最大值語法
select max(price) from order_table; //舉例
SELECT MIN(列名) FROM 表名; //最小值語法
select min(price) from order_table; //舉例
2.4 AVG 平均值
AVG函式返回滿足where條件的一列的平均值
SELECT AVG(列名) FROM 表名; //平均值語法
select avg(price) from order_table; //舉例
2.5 SUM 求和
SUM函式返回滿足where條件的一列求和
SELECT SUM(列名) FROM 表名; //求和語法
select sum(price) from order_table; //舉例
2.6 聚合函式使用方法
(1)結合where使用
select sum(price) from order_table where user_id=1; //結合where使用
(2)多個聚合函式同時使用
select sum(price),avg(price),max(price),min(price)
from order_table where user_id=1; //多個聚合函式同時使用
(3)結合count使用
select sum(price),avg(price),max(price),min(price),count(1)
from order_table where user_id=1; //結合count使用
3. limit的用法(一般跟在最後面)
//語法
select * from 表名 limit m,n //m是指從哪行開始,m從0取值,0表示第一行;n指從第m+1條開始,取n條
//舉例
select * from 表名 limit 0,2; //表示從第1行開始,顯示2行結果
select * from order_table limit 2,3; //從第3行開始,顯示3行資料
如果只給定一個引數,它表示返回最大的行數目:
select * from order_table limit 5; //表示查詢前5行
4. group by 分組(面試可能會問)
使用group by子句對列進行分組,還可使用having進行二次過濾,having通常跟在group by後面
(1)不分組時
select max(price) from order_table group by user_id;
//正常不分組時,顯示最大價格
(2)分組時
select max(price),user_id from order_table
group by user_id; //按照user_id分組,顯示最大價格(按照user_id分組,一人一組,顯示每組最大價格)
使用user_id分組,前面user_id就不能單獨出現,可以使用聚合運算,如果二者不相同,則會報錯
select sum(price),user_id from order_table
group by product_id; //此處按照product_id分組,前面user_id就不能單獨出現,會報錯
select sum(price),count(user_id),product_id from
order_table group by product_id; //4個人買1001商品,總價19.96;4個人買1002商品,總價59.96
(3) 不加having
select filed,聚合函式 from 表名 where 子句 group by field; //不加having
(4) 加having
Select filed,聚合函式 from 表名 where 子句
group by filed having 聚合函式 過濾條件;//加having進行二次過濾,filed表示列名,聚合函式指count/sum等
select sum(price),count(user_id),product_id from
order_table group by product_id having count(user_id)>2;
- 說明
使用group by後只能展示分組的列名+聚合函式結果,因為其餘列已經基於分組這一列合併