1. 程式人生 > 其它 >像Excel一樣使用SQL進行資料分析

像Excel一樣使用SQL進行資料分析

技術標籤:字串資料庫資料分析資料探勘hash

SQL專欄

SQL資料庫基礎知識彙總

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

往期精選

geopandas,python畫地圖這麼簡單!

最全資料科學小抄,趕緊收藏吧!

教你如何使用Python製作酷炫二維碼

numba,讓python飛起來!
大資料告訴你,颱風愛在我國哪登陸

資料科學 | 是時候該用seaborn畫圖了

小白如何入門Python爬蟲

那些不為人知的優秀視覺化庫

Python機器學習·微教程

小白入門Python資料科學全教程

xlwings,讓excel飛起來!

一文搞懂python匿名函式

一文讀懂Python的map、reduce函式

一文搞懂python迭代器和生成器

Python大資料分析

data creatvalue

長按二維碼關注