-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy path33-Windows Functions.sql
More file actions
108 lines (96 loc) · 3.23 KB
/
33-Windows Functions.sql
File metadata and controls
108 lines (96 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
-- Xep hang san pham theo gia giam dan tren toan bo table
SELECT
[ProductID],
[ProductName],
[CategoryID],
[UnitPrice],
RANK() OVER (ORDER BY [UnitPrice] DESC) as Ranking
FROM [dbo].[Products]
-- Xep hang san pham theo gia giam dan tren the loai
SELECT
[ProductID],
[ProductName],
[CategoryID],
[UnitPrice],
RANK() OVER (PARTITION BY [CategoryID] ORDER BY [UnitPrice] DESC) as Ranking
FROM [dbo].[Products]
-- Vi du 3
-- Tạo bảng "sinh_vien"
CREATE TABLE [sinh_vien] (
[ma_sinh_vien] INT PRIMARY KEY,
[ho_ten] NVARCHAR(255),
[diem_trung_binh] DECIMAL(3, 2),
[ma_lop_hoc] INT
);
-- Chèn 20 dòng dữ liệu thực tế vào bảng
-- Tạo bảng "sinh_vien"
CREATE TABLE [sinh_vien] (
[ma_sinh_vien] INT PRIMARY KEY,
[ho_ten] NVARCHAR(255),
[diem_trung_binh] DECIMAL(3, 2),
[ma_lop_hoc] INT
);
-- Chèn 20 dòng dữ liệu thực tế vào bảng
INSERT INTO [sinh_vien] ([ma_sinh_vien], [ho_ten], [diem_trung_binh], [ma_lop_hoc])
VALUES
(1, N'Nguyễn Văn A', 3.75, 101),
(2, N'Trần Thị B', 3.88, 102),
(3, N'Phạm Văn C', 3.75, 101),
(4, N'Huỳnh Thị D', 3.92, 103),
(5, N'Lê Văn E', 3.60, 102),
(6, N'Ngô Thị F', 3.78, 101),
(7, N'Trịnh Văn G', 3.65, 102),
(8, N'Võ Thị H', 3.80, 103),
(9, N'Đặng Văn I', 3.55, 101),
(10, N'Hoàng Thị K', 3.95, 102),
(11, N'Mai Thị L', 3.70, 103),
(12, N'Lý Thị M', 3.62, 101),
(13, N'Chu Thị N', 3.85, 102),
(14, N'Đỗ Thị P', 3.58, 103),
(15, N'Dương Văn Q', 3.72, 101),
(16, N'Lâm Thị R', 3.85, 102),
(17, N'Nguyễn Văn S', 3.68, 101),
(18, N'Nguyễn Thị T', 3.75, 103),
(19, N'Nguyễn Văn U', 3.93, 102),
(20, N'Nguyễn Thị V', 3.67, 101);
-- Xếp hạng sinh viên toàn trường dựa trên điểm tb giảm dần
SELECT
[ma_sinh_vien],
[ho_ten],
[diem_trung_binh],
[ma_lop_hoc],
RANK() OVER(ORDER BY [diem_trung_binh] DESC) as "xep_hang"
FROM [dbo].[sinh_vien]
-- Xếp hạng sinh viên theo từng lớp học dựa trên điểm tb giảm dần
SELECT
[ma_sinh_vien],
[ho_ten],
[diem_trung_binh],
[ma_lop_hoc],
Rank() OVER (PARTITION BY [ma_lop_hoc] ORDER BY [diem_trung_binh] DESC) as XepHang
FROM [dbo].[sinh_vien]
-- Xếp hạng sinh viên theo từng lớp học dựa trên điểm tb giảm dần, không nhảy hạng
SELECT
[ma_sinh_vien],
[ho_ten],
[diem_trung_binh],
[ma_lop_hoc],
DENSE_RANK() OVER (PARTITION BY [ma_lop_hoc] ORDER BY [diem_trung_binh] DESC) as XepHang
FROM [dbo].[sinh_vien]
-- Xếp hạng sinh viên theo từng lớp học dựa trên điểm tb giảm dần, không bị trùng hạng
SELECT
[ma_sinh_vien],
[ho_ten],
[diem_trung_binh],
[ma_lop_hoc],
ROW_NUMBER() OVER (PARTITION BY [ma_lop_hoc] ORDER BY [diem_trung_binh] DESC) as XepHang
FROM [dbo].[sinh_vien]
-- Chúng ta sẽ sử dụng hàm LAG() lấy thông tin về đơn đặt hàng
-- và ngày đặt hàng của đơn đặt hàng trước đó cho mỗi khách hàng.
SELECT
[CustomerID],
[OrderID],
[OrderDate],
LAG([OrderDate]) OVER (PARTITION BY [CustomerID] ORDER BY [OrderDate] ASC) AS PreviousOrderDate
FROM [dbo].[Orders]
ORDER BY [CustomerID], [OrderDate];