與21世紀的數(shù)據(jù)相關(guān)的所有事物都已變得至關(guān)重要。對于任何數(shù)據(jù)科學有志者來說,關(guān)鍵技能之一就是掌握SQL函數(shù),以進行有效而高效的數(shù)據(jù)檢索。SQL被廣泛用于直接從數(shù)據(jù)庫查詢,因此,SQL是用于數(shù)據(jù)分析任務(wù)的最常用語言之一。但是它有其自身的復雜性和細微差別。
當涉及到SQL函數(shù)時,它們有很多。您需要在正確的時間了解正確的功能,以實現(xiàn)所需的功能。但是,包括我在內(nèi)的我們大多數(shù)人都有跳過這個話題或?qū)⑵鋺叶礇Q的趨勢。相信我,在學習過程中保持這些話題不變是一個愚蠢的錯誤。
因此,在本文中,我將帶您了解一些您必須定期用于數(shù)據(jù)分析任務(wù)的最常見的SQL函數(shù)。
數(shù)據(jù)集簡介
我將通過使用虛擬數(shù)據(jù)集向您展示本文涵蓋的所有功能的實際應(yīng)用。假設(shè)全國各地都有零售連鎖店。以下SQL表記錄了從零售店購買商品的人,購買商品的日期,所來自的城市以及購買金額。
我們將使用此示例,在本文中學習不同的功能。
匯總功能
- 計數(shù)最重要的聚合函數(shù)之一是count()函數(shù)。它從表中的列返回記錄數(shù)。在我們的表格中,我們可以使用count()函數(shù)獲取訂單來自的城市數(shù)。我們這樣做如下:
- 您會在這里注意到兩件事。首先,Null函數(shù)對空值進行計數(shù)。然后,重復值被多次計數(shù)。為了解決這個問題,我們可以將其與distinct()函數(shù)配對,該函數(shù)將僅計算該列中的不同值。
- 和每當我們處理與數(shù)字有關(guān)的列時,我們必然要檢查它們的總和。例如,在我們的表中,金額的總和對于分析已發(fā)生的銷售很重要。可以使用對列名稱起作用的sum()函數(shù)來計算總和。
- 但是,如果我們想要計算總金額為每一個城市?為此,我們可以將此功能與Groupby子句結(jié)合使用,以按城市對輸出進行分組。這是您如何實現(xiàn)的。
- 這向我們表明,該公司將Indore視為我們收入最高的城市。
- 平均過去曾做過一些數(shù)據(jù)分析的任何人都知道,平均值是比僅計算數(shù)值總和更好的度量標準。在我們的示例中,我們有來自同一城市的多個訂單,因此,計算平均金額而不是總金額會更加謹慎
- 最小和最大最后,如果不計算最小值和最大值,匯總值分析將無法完成。可以使用min()和max()函數(shù)簡單地計算這些值。
數(shù)學函數(shù)
大多數(shù)時候,您將不得不處理SQL表中的數(shù)字以進行數(shù)據(jù)分析。要處理這些數(shù)字,您需要數(shù)學函數(shù)。這些可能有一個簡單的定義,但在分析時,它們是使用最多的函數(shù)。
- 腹肌abs()是最常見的數(shù)學函數(shù)。它計算作為參數(shù)傳遞的數(shù)值的絕對值。為了了解在哪里有幫助,讓我們首先從表中找出每個記錄的金額與平均金額的偏差。
- 現(xiàn)在,如您所見,這里有一些負值。可以使用abs()函數(shù)將其輕松轉(zhuǎn)換為正值,如下所示:
- 天花板和地板處理數(shù)字值時,其中一些可能具有十進制值。你如何處理這些?您可以簡單地將它們轉(zhuǎn)換為使用ceil()的下一個較高的整數(shù),或者使用floor()轉(zhuǎn)換為上一個較低的整數(shù)。在我們的表格中,“ 金額”列有很多十進制值。我們可以使用ceil()或floor()函數(shù)將它們轉(zhuǎn)換為整數(shù)。
- 截短有時您不希望將十進制值轉(zhuǎn)換為整數(shù),而是截斷數(shù)字中的小數(shù)位數(shù)。Truncate()函數(shù)實現(xiàn)了它。您要做的就是將十進制數(shù)作為第一個參數(shù),并將要截斷的位數(shù)作為第二個參數(shù)。
- 如您所見,我將值截斷到小數(shù)點后一位。
- 模數(shù)模函數(shù)是強大而重要的功能。當?shù)诙€數(shù)字除以第一個數(shù)字時,Modulo返回剩余的余數(shù)。通過調(diào)用函數(shù)mod(x,y)來使用它,其中的結(jié)果是x除以y時剩下的余數(shù)。它在分析中具有非常重要的作用。您可以使用它從SQL表中查找奇數(shù)或偶數(shù)記錄。例如,在示例表中,我可以使用模函數(shù)來查找數(shù)量奇數(shù)的那些記錄。
- 或者,如果使用not關(guān)鍵字否定上述結(jié)果,我甚至可以找到數(shù)量。
字符串函數(shù)
當您使用SQL表時,您將始終需要處理字符串。當您想以一種合理的方式輸出結(jié)果時,它們尤其重要。
- 上下限您可以分別使用upper()或lower()函數(shù)將字符串值轉(zhuǎn)換為大寫或小寫。簡而言之,這有助于使記錄值更加一致。
- 康卡特concat()函數(shù)將兩個或多個字符串合并為一個。您要做的就是將要連接的字符串作為參數(shù)提供。
- 就像您已經(jīng)注意到的那樣,即使其中一個值是Null,整個輸出也會作為Null值返回。
- 修剪Trim是一個非常重要的功能,不僅在SQL中,而且在任何語言中都有。它是最重要的字符串函數(shù)之一。它從字符串中刪除任何前導或尾隨空格。例如,在我們的示例表中,“ 姓氏”列中有許多尾隨和前導空格。我們可以使用trim()函數(shù)刪除它們。
- 如您所見,該函數(shù)已經(jīng)修剪了字符串中的任何前導或尾隨空格。
日期和時間功能
首先,毫無疑問,日期和時間功能的相關(guān)性。但這只有在您知道如何妥善處理它們的情況下!查看以下日期和時間功能,以掌握您的分析技能。
- 日期和時間如果您像示例表中一樣具有日期和時間的公共列,那么您將需要使用date()和time()函數(shù)來提取相應(yīng)的值。
- 提取但是有時您可能想更進一步,分析在一周或一個月的特定日期或一天中的特定時間下達了多少訂單。為此,您需要使用超級方便的extract()函數(shù)。語法是簡單的:提取物(單元/日期)單位可以是年,月,分鐘或秒。
- 您甚至可以提取一年中的一周或一年中的某個季度。
- 您可以從日期中提取的所有單位的完整列表如下:
- 如您所見,您可以使用extract()函數(shù)進行很多分析!
- 日期格式有時,數(shù)據(jù)庫中的日期將以與您希望查看的日期不同的格式保存。因此,要更改日期格式,可以使用date_format()函數(shù)。語法如下:date_format(date,format)當前,樣本表中保存的日期采用年-月-日格式。使用此功能,我將以日-月名稱-年份格式輸出日期。
- 根據(jù)您的要求,有很多機會可以更改格式。
windows功能
窗口函數(shù)是重要的函數(shù),但要理解它可能有些棘手。因此,我們首先從了解基本窗口功能開始。
視窗功能
窗口函數(shù)執(zhí)行的計算類似于聚合函數(shù),但略有扭曲。雖然常規(guī)聚合函數(shù)將行分組為一個輸出值,但window函數(shù)卻不這樣做。窗口函數(shù)可用于行的子集,但不會減少行數(shù)。這些保留其各自的身份。為了更好地理解它,讓我們比較一個簡單的聚合函數(shù)sum()。
在這里,我們獲得所有行的合計值。現(xiàn)在讓我們將Windows函數(shù)用于此聚合函數(shù),看看會發(fā)生什么。
您一定已經(jīng)注意到,我們?nèi)匀粫@得匯總總和值,但它們是由不同的城市組分開的。注意,我們計算每一行的輸出。
該OVER 子句將簡單集合函數(shù)到Windows功能。語法很簡單,如下所示:
window_function_name(< expression>)OVER(< partition_clause> < order_clause>)
OVER子句之前的部分是聚合函數(shù)或Windows函數(shù)。在接下來的部分中,我們將介紹一些窗口功能。
OVER子句之后的部分可以分為兩部分:
- Partition_clause定義行之間的分區(qū)。窗口功能在每個分區(qū)內(nèi)運行。在通過分區(qū)子句定義它。
- Order_clause對分區(qū)中的行進行排序。在按訂單子句定義它。
在后面的部分中,我們將在其他一些窗口功能中進行詳細介紹。
- 秩
簡單的窗口函數(shù)是rank()函數(shù)。顧名思義,它基于條件對分區(qū)組中的行進行排名。
它具有以下語法:Rank()Over(按<expression>分區(qū)按<expression>排序)
讓我們使用此函數(shù)根據(jù)每個城市內(nèi)的訂單量對表中的行進行排名。
因此,這些行已在其各自的分區(qū)組(或city)內(nèi)排名。
- 百分比值
這是一個重要的窗口函數(shù),可找到組中行的相對排名。它確定每一行的百分位數(shù)值。
其語法如下:Percent_rank()Over(按<expression>進行分區(qū)按<expression>進行排序)
盡管partition子句是可選的。
讓我們使用此功能來確定表中每個客戶的金額百分比。
- Nth_value
有時您想找出哪一行具有最高,最低或第n個最高值。例如,在這種情況下,您需要nth_value() Windows函數(shù)時,學校中得分最高的人,銷售業(yè)績最好的人等。
結(jié)果,該函數(shù)從一組有序行中返回第n個行值。語法如下:
nth_value()順序(按<表達式>分區(qū)按<表達式>順序)
讓我們使用此函數(shù)來找出誰是表中的最大買家。
雜項功能
到目前為止,我們已經(jīng)討論了非常具體的功能。現(xiàn)在,我們將探討一些其他功能,這些功能無法歸類到特定的功能組中,但具有巨大的價值。
- 兌換有時,您可能希望將輸出值轉(zhuǎn)換為指定的數(shù)據(jù)類型。此外,您可以將其視為強制轉(zhuǎn)換,可以在其中更改值的數(shù)據(jù)類型。它的語法很簡單:convert(value,type)我們可以在打印值之前使用它來轉(zhuǎn)換日期列的數(shù)據(jù)類型。
- 一片空白通常,如果您不為屬性指定非值,則很可能在該列中使用一些空值。但是,您可以使用isull()函數(shù)輕松處理它們。您只需要在函數(shù)內(nèi)編寫表達式。它將為空返回1,否則返回0。
- 看起來我們表中的lastname屬性有一些空值!
- 如果最后,您將在SQL中使用的最重要的函數(shù)是if()函數(shù)。它使您可以定義在任何編程語言中遇到的if條件。它具有簡單的語法:if(expression,value_if_true,value_if_false)使用此功能,讓我們找出哪個客戶支付了超過1000的訂單金額。
- 此外,此功能的使用是無限的,并且正確地經(jīng)常用于數(shù)據(jù)分析任務(wù)。
尾注
總而言之,我們介紹了許多基本的SQL函數(shù),這些函數(shù)必將在日常數(shù)據(jù)分析任務(wù)中大量使用。
如果你對數(shù)據(jù)分析感興趣,可以了解一下九道門商業(yè)數(shù)據(jù)分析實訓課的設(shè)計,或許能找到入門的最佳途徑!