<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          像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)鍵字:進群,帶你進入高手如云的交流群。
          推薦閱讀

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

          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲免费观看在线观看 | 午夜成人AV | 天天色色 | 逼特逼视频最新网址 | 草逼wwwwww. |