十分钟搞懂SQL数据分析
本文重點在于快速讓讀者對“SQL數據分析”有全面認識。其次,詳解SQL部分關鍵詞或函數,并用實操后的結果向大家展示SQL數據分析。
下面的框架圖展示了本文的行文順序,第(一)部分介紹SQL基本概念,第(二)到(十二)部分,講解SQL關鍵詞和業務場景。文章末尾處展現了完整的“SQL數據分析”框架圖。
(一)基本介紹
1.1 SQL是啥?
一門查詢數據庫的編程語言。
1.2 SQL能操作誰?
SQL可操作關系型數據庫,但不能操作非關系型數據庫。關系型數據庫可簡單理解為由行和列組成的二維表。關系型數據庫分為開源和收費兩類,開源的數據庫系統有MySQL、PostgreSQL, 收費有Oracle、SQL Server, DB2。以上系統盡管有不同的SQL語法,但大同小異,學會一種即可,本文選用MySQL。
1.3 SQL語句
通過SQL語句,可在數據庫中查到想要的數據。SQL語句由三部分組成,關鍵字、表名、列名。
(二) SELECT語句
2.1 “*”號代表所有列
“*”號能選出表中所有的列。例如代碼:SELECT * FROM Table, 此代碼會選出Table表中所有的列。
2.2 DISTINCT去重
DISTINCT關鍵詞,能對表中一列或多列信息進行去重。以下圖為例,DISTINCT 關鍵字對列名“product_type”去重,列中兩個“辦公”會變成去重后的一個“辦公”,“服裝”和“廚房”也有同樣去重效果 。
2.3 ORDER BY排序
ORDER BY 的作用是排序,可對一列或多列排序。下圖展示了對兩列同時進行排序的例子。
2.3.1兩列排序
代碼:“ORDER BY department,salary”,作用是先對department的各個部門排序,其次,基于已排序部門的基礎上再對salary進行排序(默認升序)。
首先,對部門finance ,marketing,technology按照26個英文字母的升序進行排序,部門依次被排為finance第一,marketing第二,technology第三。其次,當同一部門出現多個員工時,再按照salary大小進行升序排序, 比如,部門的Joe、Sam、Jason被分別排為第一,第二,第三。詳情見下圖。
2.3.2業務場景
高鐵買票時,會用到價格排序,出發時間、耗時長短;淘寶血拼時,會用到價格排序;大眾點評找美食時,會用到距離優先、好評優先等。顧客在使用這些功能時,后臺數據庫用到的就是簡單但強大的“ORDER BY”語句。
2.4LIMIT限制行數
LIMIT關鍵詞可限制查詢行數。LIMIT用法有二。用法一,返回表的前X行;用法二,返回表的特定行。
2.4.1返回前X行
舉例, LIMIT 5, 返回表的前5行。
2.4.2返回特定行
舉例, LIMIT 5,10, 從第6行開始,返回10行。
2.5語句執行順序
數據庫執行SQL代碼的順序不是按照抒寫的順序來執行,而是按照特點關鍵字的順序來執行,執行順序為:FROM->WHERE->GROUP BY ->HAVING ->SELECT ->ORDER
(三) 過濾數據
3.1 WHERE過濾
3.1.1大于小于
WHERE語句能選出特定范圍的數據,分為三類:①大于,②小于,③大于且小于。以字段“price”為例對此三類進行解釋。
WHERE price > 1000 能選出價格大于1000的數據;
WHERE price < 200 能選出價格小于200的數據;
WHERE 700 < price< 1000 能選出價格大于700且小于1000的數據。
實操效果見下圖。
3.1.2等于
WHERE語句能選出等于特定數值或文字的數據,比如,WHERE price = 388, 可選出價格為388的數據;再比如,WHERE hotel =‘希爾頓’能選出酒店為“希爾頓”的數據。見下圖。
3.1.3業務場景
京東、淘寶、天貓、攜程的官網和APP,均提供“價格區間”和“品牌篩選”的功能,背后的代碼就是WHERE語句。
3.2 BETWEEN過濾
WHERE BETWEEN也能篩出特定區間的數值,例如, WHERE price BETWEEN700 AND 1000, 能篩出價格從700到1000的數據, 功能類似于“WHERE 大于且小于”。
3.3 IN或 NOT IN過濾
WHERE IN 也可篩選數據,例如字段“capital_flows”(資金流向的意思)的數值可以是各個行業,WHERE IN 語句能把“capital_flows”的行業限定在‘房地產’和‘證券’行業,代碼見下圖。
業務場景:近些年“房地產”和“證券”成為銀保監會重點關注的行業,在銀保監會大量的EAST報送數據中(EAST系統可簡單理解為檢查各家銀行數據的系統),如何迅速找到資金流到“房地產”和“證券”的數據呢?當屬WHERE IN 語句。
3.4 NULL過濾
WHERE IS NULL 語句能從數據中快速篩選出數據為空值的記錄,代碼和實操效果見下圖。
業務場景:銀保監會要求各家銀行提供的EAST報送數據不能為空值。例如,客戶的“社會信用代碼”,“貸款流向行業”不能為空。WHERE IS NULL語句能快速找出數據為空值的記錄。
3.4通配符過濾
通配符(“%”或“_”) 能搭配數據中的任何字符, 達到篩選數據的效果。
3.4.1 %百分號
%百分號 代表0到多個任意字符。舉例,代碼LIKE “天安門%” 會找到只有“天安門”這三個字和“天安門”后面有其他文字的數據,詳情見3.4.2圖。
3.4.2 _下劃線
_下劃線 能代表1個任意字符。LIKE '天安門_' 會找到“天安門”后面有一個文字的數據,比如“天安門東”。詳情見下圖。
3.5正則表達式
正則表達式是由各種符號組成的搜索模式,相比“通配符”正則表達式更加精確。下列符號能組成各種正則表達式,但種類繁多且抽象,大家感受一下即可。
3.6多條件過濾
WHERE語句中,AND和OR能把兩個或多個條件結合起來。AND: 如果第一個條件和第二個條件都成立,則顯示一條記錄;OR如果第一個條件和第二個條件只要有一個成立,則顯示一條記錄。
(四)處理字段
4.1拼接字段
CONCAT函數能把多個字段拼接起來,例如下圖,concat函數能把company和country兩個字段拼接在一起,具體代碼見文章末尾處的框架圖。
4.2計算字段
字段之間可做加減乘除運算,例如下圖展示了,price字段 與 quantity字段相乘得出新的字段,計算結果如下圖。
(五)處理數據
處理數據分為三類:處理文本,處理時間,處理數值。對應的三類函數分別為“文本處理函數”,“時間處理函數“,“數值處理函數”。
5.1文本處理函數
以下是對各個文本處理函數的總結,第一列和第四列是分別是函數名稱和相應的解釋;第二列和第三列分別是例子和返回的結果。
5.2時間處理函數
下圖是對時間處理函數的總結和解釋。
5.3數值處理函數
下圖是對數值處理函數的總結和說明。
(六)聚合函數
常用的聚合函數有以下五種,詳情見下圖。
“計數函數”, 例如COUNT(price),對price列的行數進行計數。
“平均值函數”,例如AVG(price),對price列求平均值。
“求和函數”,例如SUM(price),對price列中所有值進行求和。
“最大值函數”,例如MAX(price),找出price列中的最大值。
“最小值函數”,例如MIN(price),找出price列中的最小值。
(七)分組數據
GROUP BY關鍵詞可對數據進行分組,HAVING可對分組后的數據進行過濾。舉例,GROUP BY將列"bedrooms”中數量為2、3、4的數據各分為一組;HAVING 又能把數量大于2的分組后數據篩選出來。若覺得抽象,請參考下圖。
(八)CASE WHEN 搜索
CASE WHEN搜索語句是一種條件表達式,可實現對定量數據的定性描述。舉例,可將兩個臥室描述為“小”,三個臥室描述為“適中”,四個臥室描述為“大”, 請參考下圖。
(九)窗口函數
窗口函數可分為“聚合函數的窗口函數”和“專用窗口函數”。基本語法:<窗口函數> OVER ( [PARTITION BY <>]ORDER BY <>)
9.1聚合函數的窗口函數
實操效果和關鍵詞詳見下圖。
9.2專用窗口函數
RANK函數會出現相同排序,和“跳序”
DENSE_RANK函數,會出現相同排序,但無“跳序”
ROW_NUMBER函數,不存在重復的排序。
(十)子查詢
子查詢是嵌套在主查詢中的查詢,可以簡單理解為在SELECT語句中又嵌套一個SELECT語句。理論上,子查詢可嵌套在各個位置,但在實際工作中,主要嵌套在SELECT、WHERE、HAVING等關鍵詞后面。
(十一)多表連接
一張表往往難以查詢到需要的所有字段,多表連接可以同時查詢多個表的字段,把不同表中的字段進行橫向拼接,以滿足在多表中各個字段的查詢。多表連接主要分為內連接、左連接、右連接、全連接、交叉連接。
以左連接為例,Product表為左表,連接Price表,關聯字段為product_id。返回結果:保留左表product表的所有數據,并保留Price表中product_id 為1和3的數據,詳情見下圖。
(十二)組合查詢
組合查詢可實現多個SELECT語句的同時查詢,并將查詢結果作為單個結果集返回。關鍵詞“UNION”可對結果集進行去重,“UNION ALL”不能對結果集進行去重。
(十三)結束語及完整框架圖
本文已對“SQL數據分析”進行梳理,并對某些關鍵詞和語句進行了詳解。筆者梳理出“SQL數據分析”的完整框架圖送給大家,希望對你們有幫助。
團隊介紹:我們是畢馬威旗下的專業數據挖掘團隊,微信公眾號(kpmgbigdata)每周六晚8點準時推送一篇原創數據科學文章。我們的作品都由項目經驗豐富的博士或資深顧問精心準備,分享結合實際業務的理論應用和心得體會。歡迎大家關注我們的微信公眾號,關注原創數據挖掘精品文章;您也可以在公眾號中直接發送想說的話,與我們聯系交流。
轉 https://www.sohu.com/a/344088239_692358
總結
以上是生活随笔為你收集整理的十分钟搞懂SQL数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11平板模式怎么打开平板电脑如何打
- 下一篇: 鲫鱼怎么做有营养?