像Excel一樣使用SQL進行資料分析
阿新 • • 發佈:2021-01-18
SQL專欄
Excel是資料分析中最常用的工具 ,利用Excel可以完成資料清洗,預處理,以及最常見的資料分類,資料篩選,分類彙總,以及資料透視等操作,而這些操作用SQL一樣可以實現。SQL不僅可以從資料庫中讀取資料,還能通過不同的SQL函式語句直接返回所需要的結果,從而大大提高了自己在客戶端應用程式中計算的效率。
1 重複資料處理
查詢重複記錄
SELECT* FROMuser Where(nick_name,password) in ( SELECTnick_name,password FROMuser groupbynick_name,password havingcount(nick_name)>1 );
查詢去重記錄
查詢id最大的記錄
SELECT* FROMuser
WHEREidin
(SELECTmax(id) FROMuser
groupbynick_name,password
havingcount(nick_name)>1
);
刪除重複記錄
只保留id值最小的記錄
DELETEc1
FROMcustomer c1,customer c2
WHEREc1.cust_email=c2.cust_email
ANDc1.id>c2.id;
DELETEFROMuserWhere(nick_name,password) in (SELECTnick_name,passwordFROM (SELECTnick_name,passwordFROMuser groupbynick_name,password havingcount(nick_name)>1) astmp1 ) andidnotin (SELECTidFROM (SELECTmin(id) idFROMuser groupbynick_name,password havingcount(nick_name)>1) astmp2 );
2缺失值處理
查詢缺失值記錄
SELECT* FROMcustomer
WHEREcust_email ISNULL;
更新列填充空值
UPDATEsale setcity = "未知"
WHEREcity ISNULL;
UPDATEorderitems set
price_new=IFNULL(price_new,5.74);
查詢並填充空值列
SELECTAVG(price_new) FROMorderitems;
SELECTIFNULL(price_new,5.74) ASbus_ifnull
FROMorderitems;
3 計算列
更新表新增計算列
ALTERTABLEorderitems ADDprice_new DECIMAL(8,2) NOTNULL;
UPDATEorderitems setprice_new= item_price*count;
查詢計算列
SELECTitem_price*countassales FROMorderitems;
4 排序
多列排序
SELECT* FROMorderitems
ORDERBYprice_new DESC,quantity;
查詢排名前幾的記錄
SELECT* FROMorderitems
ORDERBYprice_new DESCLIMIT5;
查詢第10大的值
SELECTDISTINCTprice_new
FROMorderitems
ORDERBYprice_new DESCLIMIT9,1;
排名
數值相同的排名相同且排名連續
SELECTprod_price,
(SELECTCOUNT(DISTINCTprod_price)
FROMproducts
WHEREprod_price>=a.prod_price
) ASrank
FROMproducts ASa
ORDERBYrank;
5 字串處理
字串替換
UPDATEdata1 SETcity=REPLACE(city,'SH','shanghai');
SELECTcity FROMdata1;
按位置字串擷取
字串擷取可用於資料分列
MySQL 字串擷取函式:left(), right(), substring(), substring_index()
SELECTleft('example.com', 3);
從字串的第 4 個字元位置開始取,直到結束
SELECTsubstring('example.com', 4);
從字串的第 4 個字元位置開始取,只取 2 個字元
SELECTsubstring('example.com', 4, 2);
按關鍵字擷取字串
取第一個分隔符之前的所有字元,結果是www
SELECTsubstring_index('www.google.com','.',1);
取倒數第二個分隔符之後的所有字元,結果是google.com;
SELECTsubstring_index('www.google.com','.',-2);
6 篩選
通過操作符實現高階篩選
使用 AND OR IN NOT 等操作符實現高階篩選過濾
SELECTprod_name,prod_price FROMProducts
WHEREvend_id IN('DLL01','BRS01');
SELECTprod_name FROMProducts WHERENOTvend_id='DLL01';
萬用字元篩選
常用萬用字元有% _ [] ^
SELECT* fromcustomers WHEREcountry LIKE"CH%";
7 表聯結
SQL表連線可以實現類似於Excel中的Vlookup函式的功能
SELECTvend_id,prod_name,prod_price
FROMVendors INNERJOINProducts
ONVendors.vend_id=Products.vend_id;
SELECTprod_name,vend_name,prod_price,quantity
FROMOderItems,Products,Vendors
WHEREProducts.vend_id=Vendors.vend_id
ANDOrderItems.prod_id=Products.prod_id
ANDorder_num=20007;
自聯結 在一條SELECT語句中多次使用相同的表
SELECTc1.cust_od,c1.cust_name,c1.cust_contact
FROMCustomers asc1,Customers asc2
WHEREc1.cust_name=c2.cust_name
ANDc2.cust_contact='Jim Jones';
8 資料透視
資料分組可以實現Excel中資料透視表的功能
資料分組
group by 用於資料分組 having 用於分組後資料的過濾
SELECTorder_num,COUNT(*) asitems
FROMOrderItems
GROUPBYorder_num HAVINGCOUNT(*)>=3;
交叉表
通過CASE WHEN函式實現
SELECTdata1.city,
CASEWHENcolour = "A"THENprice ENDASA,
CASEWHENcolour = "B"THENprice ENDASB,
CASEWHENcolour = "C"THENprice ENDASC,
CASEWHENcolour = "F"THENprice ENDASF
FROMdata1
END
往期精選
numba,讓python飛起來!
大資料告訴你,颱風愛在我國哪登陸
Python大資料分析
data creatvalue
長按二維碼關注