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