LuckyTemplates 用戶的常用 SQL 表表達式

LuckyTemplates 用戶的常用 SQL 表表達式

在此博客中,我們將討論一些通用表表達式,也稱為CTE。如果您遇到復雜的問題,使用這些SQL 表表達式 可以幫助您。

使用CTE,您可以將任何任務分解為小的且易於管理的查詢來解決複雜的問題。

現在讓我們探討一下CTE如何讓您的工作更高效地排查代碼。

目錄

創建通用 SQL 表表達式的語法 

首先,您必須鍵入“ WITH ”,然後鍵入您的CTE 表達式名稱,然後鍵入“ AS ”。

LuckyTemplates 用戶的常用 SQL 表表達式

之後,您可以在括號之間提供任何查詢。這將存儲在提供的表達式名稱中,該名稱將用作虛擬表。

LuckyTemplates 用戶的常用 SQL 表表達式

然後,使用您通過設置的表達式名稱創建的虛擬表添加SELECT 語句

LuckyTemplates 用戶的常用 SQL 表表達式

對於我們的示例,我們將使用“ USACusts ”作為表達式名稱

LuckyTemplates 用戶的常用 SQL 表表達式

對於查詢,我們將使用此代碼。 

LuckyTemplates 用戶的常用 SQL 表表達式

此查詢將創建一個虛擬表。它將顯示按客戶 ID 分組的總金額或匯總金額,其中他們所屬的國家/地區是“ USA ”。數據將從Sales.Customers表中提取。

將顯示兩列,即custidAgg_Amount。請注意,USACusts表不是物理表 ,而只是虛擬表。這意味著它在我們的數據庫中是不可見的。

在查詢之後,我們可以再添加一條SELECT 語句

LuckyTemplates 用戶的常用 SQL 表表達式

該語句將從USACusts表中選擇所有大於1000的Agg_Amount

多個常用 SQL 表表達式 

多個CTE可以通過將代碼分解為更小的塊來幫助您解決代碼中的複雜錯誤。此外,您可以根據需要定義任意數量的CTE 。下面是多個CTE的示例。

LuckyTemplates 用戶的常用 SQL 表表達式

對於此示例,我們有第一個CTE,即C1。從那裡,我們選擇了YEAR(orderdate)並從Sales.Orders 表中創建了 2 列,分別是orderyearcustid

對於名為C2的第二個CTE,我們選擇了orderyear並使用COUNT命令收集了custid的數量。然後我們將其命名為來自C1的numcustsC2中還添加了一個WHERE條件,以僅選擇大於2015的訂單年份。然後我們按orderyear對它們進行分組。

之後,我們從C2中選擇了orderyearnumcusts。然後我們添加了WHERE條件以僅選擇大於500的客戶數。

綜上所述,這段代碼用於選擇orderyear大於2015的客戶,只根據orderyear條件選擇大於500的客戶數。

使用多個 CTE 求解複雜代碼

接下來,我將演示更多示例,以進一步強調CTE在對大數據集進行故障排除時的用法。這是多個CTE的另一個示例。

LuckyTemplates 用戶的常用 SQL 表表達式

請注意,您可以按照自己的方式命名CTE,但對於本博客,我們使用C1C2C3等來輕鬆識別和理解我們如何在示例中使用它們。

回到示例,我們創建C1以僅從Sales.SalesOrderDetails表中選擇訂單數量大於5的銷售。

LuckyTemplates 用戶的常用 SQL 表表達式

然後在C2中,我們利用C1 中存儲的數據,根據Product.ID加入產品,並按產品名稱(p.Name)和產品顏色(p.Color)對它們進行分組。

由於我們在C1中聲明了條件,因此我們只會對訂單數量(OrderQty)大於5的訂單在C2中對產品名稱和產品顏色進行分組。

LuckyTemplates 用戶的常用 SQL 表表達式

之後,我們將使用命令從 C2 中選擇訂單數量大於1000的所有數據。

出於故障排除目的,您只需選擇您創建的每個CTE來檢查它是否顯示正確的數據。請參閱以下示例。

LuckyTemplates 用戶的常用 SQL 表表達式

對於C1 ,它顯示Sales.SalesOrderDetail表中訂單數量大於5的所有數據。

LuckyTemplates 用戶的常用 SQL 表表達式

然後C2顯示按產品名稱和顏色從C1分組的訂單數量的輸出。在C2中,我們可以看到orderqty列,但實際上在C2中沒有它,因為它只是我們從C1生成的計算列。從這裡開始,我們可以開始在orderqty列上使用任何條件並執行故障排除。

所以,現在您可以看到多個CTE如何通過將錯誤存儲在CTE中來幫助我們解決複雜代碼中的錯誤,並在不損壞實際代碼的情況下開始故障排除。

將 CTE 與案例陳述結合使用

讓我們用另一個具有相同上下文的示例來展示我們如何利用多個CTE對複雜代碼進行故障排除。 

在這種情況下,我們將使用一個CASE語句創建一個產品類別 ,其結果基於C2 的訂單數量。

LuckyTemplates 用戶的常用 SQL 表表達式

如前所述,我們在第一個CTEProduct Category中沒有orderqty,但是我們利用中間表來計算和執行不同的計算。

在下一個示例中,我們將根據我們在上一個示例中創建的產品類別創建一個匯總金額。 但為此,我們將把產品類別CASE語句放在第三個CTE中,即C3

LuckyTemplates 用戶的常用 SQL 表表達式

在繼續之前,讓我們通過在C3下面添加“ SELECT * FROM C3 ”來檢查C3的輸出。

LuckyTemplates 用戶的常用 SQL 表表達式

C3中,我們可以看到ProductNameColororderqtyProduct Category列。從這裡,我們可以開始基於Product Category進行聚合。讓我們在C3下面使用以下命令來完成此操作。

LuckyTemplates 用戶的常用 SQL 表表達式

下面的示例是使用上述命令創建合計金額後的結果。

LuckyTemplates 用戶的常用 SQL 表表達式

最初,我們沒有Product Categoryorderqty列,但我們能夠利用多個CTE基於這些列生成樣本輸出。

在這一點上,您可以看到我們可以在CTE的幫助下做任何事情來更有效地使用我們的代碼。

SQL 臨時表和視圖 LuckyTemplates 用戶
過濾器在 SQL 中使用 IN、NOT IN、LIKE 和 NOT LIKE
SQL 數據提取使用 OFFSET 和 FETCH

結論

在本教程中,您學習了創建通用 SQL 表表達式的正確語法,以及如何通過隔離小部分數據並將它們存儲在給定的CTE中來利用多個CTE對複雜代碼進行故障排除。

通過了解這一點,您現在可以更有效地調試代碼。請記住,您可以為CTE使用任何名稱,並且您不能使用或調用任何CTE,除非它已創建。一旦您熟悉了CTE ,您就可以認為自己是SQL的中級用戶。

如果您想了解有關此主題和其他相關內容的更多信息,您當然可以查看下面的相關鏈接列表。

一切順利,

哈菲茲


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的