Database
 sql >> Baza danych >  >> RDS >> Database

Naucz się podstawowej analizy danych za pomocą funkcji okna SQL

Ten artykuł dotyczy funkcji okna T-SQL (Transact-SQL) i ich podstawowego zastosowania w codziennych zadaniach analizy danych.

Istnieje wiele alternatyw dla T-SQL, jeśli chodzi o analizę danych. Jednakże, gdy rozważane są ulepszenia w miarę upływu czasu i wprowadzenie funkcji Windows, T-SQL jest w stanie przeprowadzić analizę danych na podstawowym poziomie, a w niektórych przypadkach nawet poza nim.

O funkcjach okna SQL

Najpierw zapoznajmy się z funkcjami SQL Window w kontekście dokumentacji Microsoft.

Definicja Microsoft

Funkcja okna oblicza wartość dla każdego wiersza w oknie.

Prosta definicja

Funkcja okna pomaga nam skoncentrować się na określonej części (oknie) zestawu wyników, dzięki czemu możemy przeprowadzić analizę danych tylko na tej konkretnej części (oknie), a nie na całym zestawie wyników.

Innymi słowy, funkcje okna SQL przekształcają zestaw wyników w kilka mniejszych zestawów do celów analizy danych.

Co to jest zestaw wyników

Mówiąc najprościej, zestaw wyników składa się ze wszystkich rekordów pobranych przez uruchomienie zapytania SQL.

Na przykład możemy utworzyć tabelę o nazwie Produkt i wstaw do niego następujące dane:

-- (1) Create the Product table
CREATE TABLE [dbo].[Product]
(
	[ProductId] INT NOT NULL PRIMARY KEY,
	[Name] VARCHAR(40) NOT NULL,
	[Region] VARCHAR(40) NOT NULL
)

-- (2) Populate the Product table
INSERT INTO Product
(ProductId,Name,Region)
VALUES
(1,'Laptop','UK'),(2,'PC','UAE'),(3,'iPad','UK')

Teraz zestaw wyników pobrany za pomocą poniższego skryptu będzie zawierał wszystkie wiersze z Produktu tabela:

-- (3) Result set
SELECT [ProductId], [Name],[Region] FROM Product

Co to jest okno

Ważne jest, aby najpierw zrozumieć pojęcie okna, ponieważ odnosi się ono do funkcji okna SQL. W tym kontekście okno jest tylko sposobem na zawężenie zakresu poprzez celowanie w określoną część zestawu wyników (jak już wspomnieliśmy powyżej).

Być może zastanawiasz się teraz – co właściwie oznacza „kierowanie na określoną część zestawu wyników”?

Wracając do przykładu, który oglądaliśmy, możemy utworzyć okno SQL oparte na regionie produktu, dzieląc zestaw wyników na dwa okna.

Zrozumienie numeru wiersza()

Aby kontynuować, będziemy musieli użyć funkcji Row_Number() który tymczasowo nadaje numer sekwencyjny wierszom wyjściowym.

Na przykład, jeśli chcemy dodać numery wierszy do zestawu wyników na podstawie ProductID, będziemy musieli użyć ROW_NUMBER() zamówić go według identyfikatora produktu w następujący sposób:

--Using the row_number() function to order the result set by ProductID
SELECT ProductID,ROW_NUMBER() OVER (ORDER BY ProductID) AS SrNo,Name,Region FROM Product

Teraz, jeśli chcemy funkcji Row_Number() aby uporządkować wynik ustawiony według ProductID malejąco, a następnie sekwencja wierszy wyjściowych na podstawie ProductID zmieni się w następujący sposób:

--Using the row_number() function to order the result set by ProductID descending
SELECT ProductID,ROW_NUMBER() OVER (ORDER BY ProductID DESC) AS SrNo,Name,Region FROM Product

Nie ma jeszcze okien SQL, ponieważ jedyne, co zrobiliśmy, to uporządkowanie zestawu według określonych kryteriów. Jak omówiono wcześniej, okienkowanie oznacza rozbicie zestawu wyników na kilka mniejszych zestawów w celu przeanalizowania każdego z nich osobno.

Tworzenie okna za pomocą Row_Number()

Aby utworzyć okno SQL w naszym zestawie wyników, będziemy musieli podzielić je na partycje na podstawie dowolnej z zawartych w nim kolumn.

Możemy teraz podzielić zestaw wyników według regionu w następujący sposób:

--Creating a SQL window based on Region
SELECT ROW_NUMBER() OVER (Partition by region ORDER BY Region) as Region_Serial_Number
, Name, Region FROM dbo.Product

Wybierz – nad klauzulą

Innymi słowy, Wybierz z Ponad Klauzula toruje drogę dla funkcji okien SQL, dzieląc zestaw wyników na mniejsze okna.

Zgodnie z dokumentacją firmy Microsoft Wybierz z Ponad Klauzula definiuje okno, które może być następnie użyte przez dowolną funkcję okna.

Teraz utwórzmy tabelę o nazwie KitchenProduct w następujący sposób:

CREATE TABLE [dbo].[KitchenProduct]
(
	[KitchenProductId] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
	[Name] VARCHAR(40) NOT NULL,
	[Country] VARCHAR(40) NOT NULL,
	[Quantity] INT NOT NULL,
	[Price] DECIMAL(10,2) NOT NULL
);
GO

INSERT INTO dbo.KitchenProduct
(Name, Country, Quantity, Price)
VALUES
('Kettle','Germany',10,15.00)
,('Kettle','UK',20,12.00)
,('Toaster', 'France',10,10.00)
,('Toaster','UAE',10,12.00)
,('Kitchen Clock','UK',50,20.00)
,('Kitchen Clock','UAE',35,15.00)

Przyjrzyjmy się teraz tabeli:

SELECT [KitchenProductId], [Name], [Country], [Quantity], [Price] FROM dbo.KitchenProduct

Jeśli chcesz zobaczyć każdy produkt z własnym numerem seryjnym, a nie numerem opartym na uogólnionym identyfikatorze produktu, musisz użyć funkcji okna SQL, aby podzielić zestaw wyników według produktu w następujący sposób:

-- Viewing each product in its own series
SELECT ROW_NUMBER() OVER (Partition by Name order by Name) Product_SrNo,Name,Country,Quantity
FROM dbo.KitchenProduct

Kompatybilność (wybierz – powyżej klauzuli)

Zgodnie z dokumentacją Microsoft , Wybierz — klauzula nadrzędna jest zgodna z następującymi wersjami baz danych SQL:

  1. SQL Server 2008 i nowsze
  2. Baza danych Azure SQL
  3. Azure SQL Data Warehouse
  4. Równoległa hurtownia danych

Składnia

SELECT – OVER (Podział według Kolejność według )

Pamiętaj, że uprościłem składnię, aby t łatwe do zrozumienia; proszę odnieść się do Dokumentacja Microsoft, aby zobaczyć pełny składnia.

Wymagania wstępne

Ten artykuł jest zasadniczo napisany dla początkujących, ale nadal istnieją pewne warunki wstępne, o których należy pamiętać.

Znajomość T-SQL

W tym artykule zakładamy, że czytelnicy mają podstawową wiedzę na temat T-SQL i są w stanie pisać i uruchamiać podstawowe skrypty SQL.

Skonfiguruj przykładową tabelę sprzedaży

Ten artykuł wymaga następującej tabeli przykładowej, abyśmy mogli uruchomić nasze przykłady funkcji okna SQL:

-- (1) Create the Sales sample table
CREATE TABLE [dbo].[Sales]
(
	[SalesId] INT NOT NULL IDENTITY(1,1), 
    [Product] VARCHAR(40) NOT NULL,
	[Date] DATETIME2,
	[Revenue] DECIMAL(10,2), 
    CONSTRAINT [PK_Sales] PRIMARY KEY ([SalesId])
);
GO

-- (2) Populating the Sales sample table
SET IDENTITY_INSERT [dbo].[Sales] ON
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (1, N'Laptop', N'2017-01-01 00:00:00', CAST(200.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (2, N'PC', N'2017-01-01 00:00:00', CAST(100.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (3, N'Mobile Phone', N'2018-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (4, N'Accessories', N'2018-01-01 00:00:00', CAST(150.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (5, N'iPad', N'2019-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (6, N'PC', N'2019-01-01 00:00:00', CAST(200.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (7, N'Laptop', N'2019-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2)))
SET IDENTITY_INSERT [dbo].[Sales] OFF

Wyświetl całą sprzedaż, uruchamiając następujący skrypt:

-- View sales
SELECT
  [SalesId],[Product],[Date],[Revenue]
FROM dbo.Sales

Grupuj według a funkcje okna SQL

Można się zastanawiać – jaka jest różnica między używaniem klauzuli Group By a funkcjami okna SQL?

Cóż, odpowiedź leży w poniższych przykładach.

Grupuj według przykładu

Aby zobaczyć całkowitą sprzedaż według produktu, możemy użyć opcji Grupuj według w następujący sposób:

-- Total sales by product using Group By
SELECT
  Product
 ,SUM(REVENUE) AS Total_Sales
FROM dbo.Sales
GROUP BY Product
ORDER BY Product

Tak więc klauzula Group By pomaga nam zobaczyć całkowitą sprzedaż. Całkowita wartość sprzedaży to suma przychodów ze wszystkich podobnych produktów w tym samym wierszu bez klauzuli Grupuj według. A co, jeśli interesuje nas przychód (sprzedaż) każdego produktu wraz z całkowitą sprzedażą?

Tutaj zaczynają działać funkcje okna SQL.

Przykład funkcji okna SQL

Aby zobaczyć produkt, przychód i łączny przychód według wszystkich podobnych produktów, musimy podzielić dane według produktów ubocznych za pomocą OVER() w następujący sposób:

-- Total sales by product using an SQL window function
SELECT
  Product
 ,REVENUE
 ,SUM(REVENUE) OVER (PARTITION BY PRODUCT) AS Total_Sales
FROM dbo.Sales

Dane wyjściowe powinny wyglądać następująco:

Dzięki temu możemy teraz łatwo zobaczyć sprzedaż każdego pojedynczego produktu wraz z całkowitą sprzedażą tego produktu. Na przykład przychody dla PC wynosi 100,00, ale całkowita sprzedaż (suma przychodów dla PC produktu) wynosi 300,00, ponieważ sprzedawano dwa różne modele komputerów.

Podstawowa analiza za pomocą funkcji agregujących

Funkcje agregujące zwracają pojedynczą wartość po wykonaniu obliczeń na zbiorze danych.

W tej sekcji zamierzamy dalej badać funkcje okna SQL – w szczególności używając ich wraz z funkcjami agregacji do wykonywania podstawowej analizy danych.

Wspólne funkcje agregujące

Najczęstsze funkcje agregujące to:

  1. Suma
  2. Liczba
  3. Min
  4. Maks
  5. Średnia (średnia)

Analiza danych zbiorczych według produktu

Aby przeanalizować zestaw wyników na podstawie produktu ubocznego za pomocą funkcji agregujących, wystarczy użyć funkcji agregującej z podziałem na produkty uboczne wewnątrz instrukcji OVER():

-- Data analysis by product using aggregate functions
SELECT Product,Revenue
,SUM(REVENUE) OVER (PARTITION BY PRODUCT) as Total_Sales 
,MIN(REVENUE) OVER (PARTITION BY PRODUCT) as Minimum_Sales 
,MAX(REVENUE) OVER (PARTITION BY PRODUCT) as Maximum_Sales 
,AVG(REVENUE) OVER (PARTITION BY PRODUCT) as Average_Sales 
FROM dbo.Sales

Jeśli przyjrzysz się bliżej komputerowi lub Laptop produkty, zobaczysz, jak funkcje agregujące współpracują razem z funkcją okna SQL.

W powyższym przykładzie widzimy, że wartość przychodów dla PC wynosi 100,00 za pierwszym razem i 200,00 następnym razem, ale Total Sales wynosi 300,00. Podobne informacje można zobaczyć dla pozostałych funkcji agregujących.

Zbiorcza analiza danych według daty

Teraz przeprowadźmy analizę danych produktów według daty, używając funkcji okna SQL w połączeniu z funkcjami agregacji.

Tym razem podzielimy wynik ustawiony według daty, a nie według produktu w następujący sposób:

-- Data analysis by date using aggregate functions
SELECT Product,date,Revenue
,SUM(REVENUE) OVER (PARTITION BY DATE) as Total_Sales 
,MIN(REVENUE) OVER (PARTITION BY DATE) as Minimum_Sales 
,MAX(REVENUE) OVER (PARTITION BY DATE) as Maximum_Sales 
,AVG(REVENUE) OVER (PARTITION BY DATE) as Average_Sales 
FROM dbo.Sales

Dzięki temu nauczyliśmy się podstawowych technik analizy danych przy użyciu podejścia funkcji okna SQL.

Rzeczy do zrobienia

Teraz, gdy znasz już funkcje okien SQL, spróbuj wykonać następujące czynności:

  1. Mając na uwadze przykłady, które przyjrzeliśmy się, wykonaj podstawową analizę danych przy użyciu funkcji okna SQL na przykładowej bazie danych wymienionej w tym artykule.
  2. Dodanie kolumny Customer do tabeli Sales sample i zobacz, jak bogata może stać się analiza danych po dodaniu do niej innej kolumny (klienta).
  3. Dodanie kolumny Region do tabeli Przykładowa sprzedaż i wykonanie podstawowej analizy danych przy użyciu funkcji agregujących według regionu.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchomienie bazy danych RAC kończy się niepowodzeniem z błędem ORA-12547

  2. Notacja IDEF1X

  3. Profilowanie danych:odkrywanie szczegółów danych

  4. Jak chronić aplikację JDBC przed wstrzyknięciem SQL?

  5. Sterowniki Easysoft ODBC i biblioteka ODBCINST