1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        像Excel一樣使用SQL進行數(shù)據(jù)分析

        共 3628字,需瀏覽 8分鐘

         ·

        2020-07-27 18:44

        點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

        設(shè)為“置頂或星標”,第一時間送達干貨

        Excel是數(shù)據(jù)分析中最常用的工具 ,利用Excel可以完成數(shù)據(jù)清洗,預(yù)處理,以及最常見的數(shù)據(jù)分類,數(shù)據(jù)篩選,分類匯總,以及數(shù)據(jù)透視等操作,而這些操作用SQL一樣可以實現(xiàn)。

        SQL不僅可以從數(shù)據(jù)庫中讀取數(shù)據(jù),還能通過不同的SQL函數(shù)語句直接返回所需要的結(jié)果,從而大大提高了自己在客戶端應(yīng)用程序中計算的效率。


        1 ?重復(fù)數(shù)據(jù)處理

        查找重復(fù)記錄
        SELECT?* FROM?user?
        Where?(nick_name,password) in
        (
        SELECT?nick_name,password?
        FROM?user?
        group?by?nick_name,password?
        having?count(nick_name)>1
        );


        查找去重記錄

        查找id最大的記錄

        SELECT?* FROM?user?
        WHERE?id?in
        (SELECT?max(id) FROM?user
        group?by?nick_name,password?
        having?count(nick_name)>1
        );


        刪除重復(fù)記錄

        只保留id值最小的記錄

        DELETE??c1
        FROM??customer c1,customer c2
        WHERE?c1.cust_email=c2.cust_email
        AND?c1.id>c2.id;
        DELETE?FROM?user?Where?(nick_name,password) in
        (SELECT?nick_name,password?FROM
        ????(SELECT?nick_name,password?FROM?user?
        ????group?by?nick_name,password?
        ????having?count(nick_name)>1) as?tmp1
        )
        and?id?not?in
        (SELECT?id?FROM
        ????(SELECT?min(id) id?FROM?user?
        ?????group?by?nick_name,password?
        ?????having?count(nick_name)>1) as?tmp2
        );



        2??缺失值處理

        查找缺失值記錄
        SELECT?* FROM?customer
        WHERE?cust_email IS?NULL;


        更新列填充空值
        UPDATE?sale set?city = "未知"?
        WHERE?city IS?NULL;

        UPDATE?orderitems set?
        price_new=IFNULL(price_new,5.74);


        查詢并填充空值列
        SELECT?AVG(price_new) FROM?orderitems;

        SELECT?IFNULL(price_new,5.74) AS?bus_ifnull
        FROM?orderitems;



        3 ?計算列

        更新表添加計算列
        ALTER?TABLE?orderitems ADD?price_new DECIMAL(8,2) NOT?NULL;

        UPDATE?orderitems set?price_new= item_price*count;


        查詢計算列
        SELECT?item_price*count?as?sales FROM?orderitems;



        4 ?排序

        多列排序
        SELECT?* FROM?orderitems
        ORDER?BY?price_new DESC,quantity;


        查詢排名前幾的記錄

        SELECT ?* FROM?orderitems
        ORDER?BY?price_new DESC?Limit 5;


        查詢第10大的值

        SELECT?DISTINCT?price_new
        FROM?orderitems
        ORDER?BY?price_new DESC?LIMIT?9,1;


        排名

        數(shù)值相同的排名相同且排名連續(xù)

        SELECT?prod_price,
        (SELECT?COUNT(DISTINCT?prod_price)
        FROM?products
        WHERE?prod_price>=a.prod_price
        ) AS?rank
        FROM?products AS?a
        ORDER?BY?rank?;



        5 字符串處理

        字符串替換
        UPDATE?data1 SET?city=REPLACE(city,'SH','shanghai');

        SELECT?city FROM?data1;


        按位置字符串截取

        字符串截取可用于數(shù)據(jù)分列
        MySQL 字符串截取函數(shù):left(), right(), substring(), substring_index()

        SELECT?left('example.com', 3);
        從字符串的第 4 個字符位置開始取,直到結(jié)束
        SELECT?substring('example.com', 4);

        從字符串的第 4 個字符位置開始取,只取 2 個字符

        SELECT?substring('example.com', 4, 2);


        按關(guān)鍵字截取字符串

        取第一個分隔符之前的所有字符,結(jié)果是www

        SELECT?substring_index('www.google.com','.',1);

        取倒數(shù)第二個分隔符之后的所有字符,結(jié)果是google.com;

        SELECT?substring_index('www.google.com','.',-2);



        6 篩選

        通過操作符實現(xiàn)高級篩選

        使用 AND OR IN NOT 等操作符實現(xiàn)高級篩選過濾

        SELECT?prod_name,prod_price FROM?Products
        WHERE?vend_id IN('DLL01','BRS01');
        SELECT?prod_name FROM?Products WHERE?NOT?vend_id='DLL01';


        通配符篩選

        常用通配符有% _ [] ^

        SELECT?* from?customers WHERE?country LIKE?"CH%";



        7 表聯(lián)結(jié)

        SQL表連接可以實現(xiàn)類似于Excel中的Vlookup函數(shù)的功能

        SELECT?vend_id,prod_name,prod_price
        FROM?Vendors INNER?JOIN?Products
        ON?Vendors.vend_id=Products.vend_id;

        SELECT?prod_name,vend_name,prod_price,quantity
        FROM?OderItems,Products,Vendors
        WHERE?Products.vend_id=Vendors.vend_id
        AND?OrderItems.prod_id=Products.prod_id
        AND?order_num=20007;


        自聯(lián)結(jié) 在一條SELECT語句中多次使用相同的表
        SELECT?c1.cust_od,c1.cust_name,c1.cust_contact
        FROM?Customers as?c1,Customers as?c2
        WHERE?c1.cust_name=c2.cust_name
        AND?c2.cust_contact='Jim Jones';



        8 數(shù)據(jù)透視

        數(shù)據(jù)分組可以實現(xiàn)Excel中數(shù)據(jù)透視表的功能

        數(shù)據(jù)分組

        group by 用于數(shù)據(jù)分組 having 用于分組后數(shù)據(jù)的過濾

        SELECT?order_num,COUNT(*) as?items
        FROM?OrderItems
        GROUP?BY?order_num HAVING?COUNT(*)>=3;


        交叉表

        通過CASE WHEN函數(shù)實現(xiàn)
        SELECT?data1.city,
        CASE?WHEN?colour = "A"?THEN?price END?AS?A,
        CASE?WHEN?colour = "B"?THEN?price END?AS?B,
        CASE?WHEN?colour = "C"?THEN?price END?AS?C,
        CASE?WHEN?colour = "F"?THEN?price END?AS?F
        FROM?data1

        注:以上代碼在MySQL數(shù)據(jù)庫中執(zhí)行

        ——End——

        后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
        后臺回復(fù)關(guān)鍵字:進群,帶你進入高手如云的交流群。
        推薦閱讀

        這是一個能學(xué)到技術(shù)的公眾號,歡迎關(guān)注
        點擊「閱讀原文」了解SQL訓(xùn)練營

        瀏覽 33
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产三级三级三级看三级 | 老汉噗嗤一声整根全进我的身体 | 久久久免费精品国产 | 国产又爽又黄的视频在线观看 | 黄色污网站免费观看 | 男人添女人下面免费视频 | 女干部光着屁股让领导玩 | 娇妻被各种姿势c到高潮 | 免费一级无码婬片AA片情人 | 偷拍自拍区 |