Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Pelajari Analisis Data Dasar dengan Fungsi SQL Window

Artikel ini adalah tentang fungsi Jendela T-SQL (Transact-SQL) dan penggunaan dasarnya dalam tugas analisis data sehari-hari.

Ada banyak alternatif untuk T-SQL dalam hal analisis data. Namun, ketika perbaikan dari waktu ke waktu dan pengenalan fungsi Window dipertimbangkan, T-SQL mampu melakukan analisis data pada tingkat dasar dan, dalam beberapa kasus, bahkan lebih dari itu.

Tentang Fungsi Jendela SQL

Pertama, mari kenali dulu fungsi SQL Window dalam konteks dokumentasi Microsoft.

Definisi Microsoft

Fungsi jendela menghitung nilai untuk setiap baris di jendela.

Definisi Sederhana

Fungsi jendela membantu kita untuk fokus pada bagian tertentu (jendela) dari kumpulan hasil sehingga kita dapat melakukan analisis data pada bagian tertentu (jendela) saja, bukan pada keseluruhan kumpulan hasil.

Dengan kata lain, fungsi jendela SQL mengubah kumpulan hasil menjadi beberapa kumpulan yang lebih kecil untuk tujuan analisis data.

Apa yang dimaksud dengan kumpulan hasil

Sederhananya, kumpulan hasil terdiri dari semua catatan yang diambil dengan menjalankan kueri SQL.

Misalnya, kita dapat membuat tabel bernama Produk dan masukkan data berikut ke dalamnya:

-- (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')

Sekarang, kumpulan hasil yang diambil dengan menggunakan skrip di bawah ini akan berisi semua baris dari Produk tabel:

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

Apa itu Jendela

Penting untuk terlebih dahulu memahami konsep jendela yang berkaitan dengan fungsi jendela SQL. Dalam konteks ini, jendela hanyalah cara untuk mempersempit cakupan Anda dengan menargetkan bagian tertentu dari kumpulan hasil (seperti yang telah kami sebutkan di atas).

Anda mungkin bertanya-tanya sekarang – apa arti sebenarnya dari 'menargetkan bagian tertentu dari kumpulan hasil'?

Kembali ke contoh yang kita lihat, kita dapat membuat jendela SQL berdasarkan wilayah produk dengan membagi hasil yang ditetapkan menjadi dua jendela.

Memahami Row_Number()

Untuk melanjutkan, kita perlu menggunakan fungsi Row_Number() yang untuk sementara memberikan nomor urut ke baris keluaran.

Misalnya, jika kita ingin menambahkan nomor baris ke kumpulan hasil berdasarkan ProductID, kita harus menggunakan ROW_NUMBER() untuk memesannya dengan ID Produk sebagai berikut:

--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

Sekarang, jika kita menginginkan fungsi Row_Number() untuk memesan hasil yang ditetapkan oleh ProductID menurun, maka urutan baris keluaran berdasarkan ProductID akan berubah sebagai berikut:

--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

Belum ada jendela SQL karena satu-satunya hal yang telah kami lakukan adalah mengurutkan kumpulan berdasarkan kriteria tertentu. Seperti yang telah dibahas sebelumnya, windowing berarti memecah kumpulan hasil menjadi beberapa kumpulan yang lebih kecil untuk menganalisis masing-masing secara terpisah.

Membuat Jendela dengan Row_Number()

Untuk membuat jendela SQL di kumpulan hasil kami, kami perlu mempartisinya berdasarkan kolom mana pun yang ada di dalamnya.

Kita sekarang dapat mempartisi hasil yang ditetapkan berdasarkan wilayah sebagai berikut:

--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

Pilih – Over Clause

Dengan kata lain, Pilih dengan Berakhir klausa membuka jalan bagi fungsi jendela SQL dengan mempartisi hasil yang ditetapkan ke dalam jendela yang lebih kecil.

Menurut dokumentasi Microsoft, Pilih dengan Lebih dari klausa mendefinisikan jendela yang kemudian dapat digunakan oleh fungsi jendela apa pun.

Sekarang, mari buat tabel bernama Produk Dapur sebagai berikut:

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)

Sekarang, mari kita lihat tabelnya:

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

Jika Anda ingin melihat setiap produk dengan nomor serinya sendiri daripada nomor berdasarkan ID produk umum, maka Anda harus menggunakan fungsi jendela SQL untuk mempartisi hasil yang ditetapkan oleh produk sebagai berikut:

-- 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

Kompatibilitas (Pilih – Over Clause)

Menurut dokumentasi Microsoft , Select – Over Clause kompatibel dengan versi database SQL berikut:

  1. SQL Server 2008 dan lebih tinggi
  2. Database SQL Azure
  3. Gudang Data Azure SQL
  4. Gudang Data Paralel

Sintaks

PILIH – OVER (Partisi menurut Urutan menurut )

Harap dicatat bahwa saya telah menyederhanakan sintaks untuk membuat i t mudah dimengerti; silakan merujuk ke yang Dokumentasi Microsoft untuk melihat penuh sintaks.

Prasyarat

Artikel ini pada dasarnya ditulis untuk pemula, tetapi masih ada beberapa prasyarat yang harus diingat.

Keakraban dengan T-SQL

Artikel ini mengasumsikan bahwa pembaca memiliki pengetahuan dasar tentang T-SQL dan mampu menulis dan menjalankan skrip SQL dasar.

Siapkan tabel contoh Penjualan

Artikel ini memerlukan tabel contoh berikut agar kita dapat menjalankan contoh fungsi jendela 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

Lihat semua penjualan dengan menjalankan skrip berikut:

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

Grup Menurut vs Fungsi Jendela SQL

Orang bisa bertanya-tanya – apa perbedaan antara menggunakan klausa Group By dan fungsi jendela SQL?

Nah, jawabannya ada pada contoh di bawah ini.

Kelompokkan Berdasarkan Contoh

Untuk melihat total penjualan berdasarkan produk, kita dapat menggunakan Group By sebagai berikut:

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

Jadi, klausa Group By membantu kita melihat total penjualan. Nilai penjualan total adalah jumlah pendapatan untuk semua produk serupa di baris yang sama tanpa klausa Kelompokkan Menurut yang digunakan. Bagaimana jika kita tertarik untuk melihat pendapatan (penjualan) masing-masing produk beserta total penjualannya?

Di sinilah fungsi jendela SQL beraksi.

Contoh Fungsi Jendela SQL

Untuk melihat produk, pendapatan, dan pendapatan total oleh semua produk serupa, kami harus mempartisi data berdasarkan produk sampingan menggunakan OVER() sebagai berikut:

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

Outputnya harus sebagai berikut:

Jadi, sekarang kita dapat dengan mudah melihat penjualan untuk masing-masing produk bersama dengan total penjualan untuk produk tersebut. Misalnya, pendapatan untuk PC adalah 100,00 tetapi total penjualan (jumlah pendapatan untuk PC produk) adalah 300,00 karena dua model PC yang berbeda sedang dijual.

Analisis Dasar dengan Fungsi Agregat

Fungsi agregat mengembalikan satu nilai setelah melakukan perhitungan pada sekumpulan data.

Di bagian ini, kita akan mengeksplorasi lebih lanjut fungsi jendela SQL – khususnya, dengan menggunakannya bersama dengan fungsi agregat untuk melakukan analisis data dasar.

Fungsi Agregat Umum

Fungsi agregat yang paling umum adalah:

  1. Jumlah
  2. Hitung
  3. Min
  4. Maks
  5. Rata-rata (Rata-rata)

Analisis Data Gabungan menurut Produk

Untuk menganalisis hasil yang ditetapkan berdasarkan produk sampingan dengan bantuan fungsi agregat, kita cukup menggunakan fungsi agregat dengan partisi produk sampingan di dalam pernyataan 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

Jika Anda melihat lebih dekat pada PC atau Laptop produk, Anda akan melihat bagaimana fungsi agregat bekerja bersama di samping fungsi jendela SQL.

Pada contoh di atas, kita dapat melihat bahwa nilai Pendapatan untuk PC adalah 100,00 pertama kali dan 200,00 waktu berikutnya, tetapi Total Penjualan berjumlah 300,00. Informasi serupa dapat dilihat untuk fungsi agregat lainnya.

Analisis Data Agregat Berdasarkan Tanggal

Sekarang, mari kita lakukan beberapa analisis data produk berdasarkan tanggal menggunakan fungsi jendela SQL yang dikombinasikan dengan fungsi agregat.

Kali ini, kita akan mempartisi hasil yang diset berdasarkan tanggal bukan berdasarkan produk sebagai berikut:

-- 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

Dengan ini, kita telah mempelajari teknik analisis data dasar menggunakan pendekatan fungsi jendela SQL.

Hal yang harus dilakukan

Sekarang Anda sudah familiar dengan fungsi jendela SQL, silakan coba yang berikut ini:

  1. Dengan mengingat contoh yang kita lihat, lakukan analisis data dasar menggunakan fungsi jendela SQL pada database sampel yang disebutkan dalam artikel ini.
  2. Menambahkan kolom Pelanggan ke tabel sampel Penjualan dan melihat seberapa kaya analisis data Anda saat kolom lain (pelanggan) ditambahkan ke dalamnya.
  3. Menambahkan kolom Wilayah ke tabel sampel Penjualan dan melakukan analisis data dasar menggunakan fungsi gabungan menurut wilayah.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengotomatiskan Tugas Pemeliharaan Database SQL menggunakan SQLCMD

  2. Perbedaan antara SQL dan NoSQL

  3. Lebih lanjut tentang CXPACKET Menunggu:Paralelisme Miring

  4. Membangun Model Data untuk Sistem Manajemen Tempat Parkir

  5. Cara memastikan bahwa database dicadangkan secara teratur