Web888.vn
  • Khám phá
  • Kiến thức công nghệ
    • Học lập trình
      • Lập trình C/C++
      • Lập trình HTML
      • Lập trình Javascript
        • ReactJS framework
        • AngularJS framework
      • Cơ sở dữ liệu
        • Micrsoft SQL Server
      • Lập trình PHP
        • Lập trình PHP cơ bản
        • Laravel Framework
    • WORDPRESS
      • WordPress cơ bản
      • WordPress nâng cao
      • Chia sẻ WordPress
    • Machine Learning
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
  • Kinh doanh online – MMO
    • Tiếp thị liên kết
    • Drop shipping
    • Google Adsense
    • Kiếm tiền youtube
    • Tiền điện tử
    • Thương mại điện tử
  • Chia sẻ IT
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
  • Kỹ năng sống
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Micrsoft SQL Server
Câu lệnh SELECT nâng cao kết hợp cùng các hàm tổng hợp dữ liệu

Câu lệnh SELECT nâng cao kết hợp cùng các hàm tổng hợp dữ liệu

  • 27-05-2022
  • Toanngo92
  • 0 Comments

Mục lục

  • Các hàm tổng hợp dữ liệu
  • Tổng hợp không gian
  • Một số hàm tổng hợp không gian
    • Union Aggregate
    • Envelope Aggregate
    • Convex Hull Aggregate

Các hàm tổng hợp dữ liệu

Đôi khi, các nhà phát triển cũng có thể yêu cầu thực hiện phân tích trên các hàng, chẳng hạn như đếm hàng, đáp ứng các tiêu chí cụ thể hoặc tóm tắt tổng doanh số cho tất cả các đơn đặt hàng. Hàm tổng hợp cho phép thực hiện nó.

Vì các hàm tổng hợp trả về một giá trị duy nhất, chúng có thể được sử dụng trong các trạng thái CHỌN trong đó một biểu thức được sử dụng, chẳng hạn như mệnh đề SELECT, HAVING và ORDER BY. Các hàm tổng hợp bỏ qua NULLS, ngoại trừ khi sử dụng COUNT (*).

Các hàm tổng hợp trong danh sách SELECT sẽ không có tên cột, có thể muốn sử dụng mệnh đề AS để đặt tên cột.

Hàm tổng hợp là một mệnh đề SELECT hoạt động trên tất cả các hàng được chuyển đến giai đoạn SELECT. Nếu không có mệnh đề GROUP BY, tất cả các hàng sẽ được tóm tắt.

Một số hàm tổng hợp:

Tên hàmCú phápMô tả
AVGAVG(<expression>)Tính tooán trung bình tất cả giá trị số không NULL trong cột
COUNT hoặc COUNT_BIGCOUNT(*) hoặc COUNT(<expression>)Khi (*) được sử dụng, hàm này đếm tất cả các hàng, bao gồm những hàng có NULL. Hàm đếm tất cả các hàng, bao gồm những hàng có NULL. Hàm trả về số lượng hàng không phải NULL cho cột khi một cột được chỉ định là . Giá trị trả về của hàm COUNT là int. Giá trị trả về của COUNT_BIG là big_int
MAXMAX(<expression>)Trả về số lớn nhất, ngày / giờ gần đây nhất hoặc chuỗi xuất hiện gần đây nhất.
MINMIN(<expression>)Trả về số nhỏ nhất, ngày giờ xa nhất hoặc chuỗi xuất hiện đầu tiên
SUMSUM(<expression>)Tính tổng tất cả các giá trị không NULL trong cột..

Ví dụ:

SELECT AVG([UnitPrice]) AS AvgUnitPrice, MIN([OrderQty]) AS MinQty, MAX([UnitPriceDiscount]) AS MaxDiscount FROM Sales.SalesOrderDetail; 

Khi sử dụng tổng hợp trong mệnh đề SELECT, tất cả các cột khác biệt trong danh sách SELECT phải được sử dụng làm đầu vào cho một hàm tổng hợp hoặc phải được tham chiếu trong mệnh đề GROUP BY. Không thành công, sẽ có lỗi xảy ra.

Ví dụ truy vấn sẽ trả về lỗi:

SELECT SalesOrderID,AVG(UnitPrice) AS AvgPrice FROM Sales.SalesOrderDetail;

Lỗi trả ra:

Column 'Sales.SalesOrderDetail.SalesOrderID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Để fix lỗi này, chỉ cần bỏ cột SalesOrderID trong câu SELECT.

Bên cạnh việc sử dụng các hàm tổng hợp với dữ liệu số, có thể sử dụng với dữ liệu date, time, character.

Ví dụ sử dụng MIN và MÃ để lấy ra orderdate gần nhất và xa nhất

SELECT MIN(OrderDate) AS Earliest, MAX(OrderDate) AS Lastest FROM Sales.SalesOrderHeader

Tổng hợp không gian

SQL Server cung cấp một số phương pháp giúp tổng hợp hai mục dữ liệu hình học hoặc địa lý riêng lẻ.

Phương thứcMô tả
STUnionTrả về một đối tượng đại diện cho sự kết hợp của một đối tượng hình học / địa lý với một đối tượng hình học / địa lý khác.
STIntersectionTrả về một đối tượng đại diện cho giaođiểm giữa một đối tượng hình học / địa lý với một đối tượng hình học / địa lý khác
STConvexHullTrả về một aobject đại diện cho phần lồi của một đối tượng hình học / địa lý. Một tập hợp các điểm được gọi là lồi nếu với hai điểm bất kỳ, toàn bộ đoạn được chứa trong tập hợp đó. Bao lồi của một tập hợp các điểm là tập lồi nhỏ nhất chứa tập hợp. Đối với bất kỳ tập hợp điểm nào đã cho, chỉ có một vỏ lồi.
STUnion()
STIntersection()
STConvexHull()

Ví dụ:

SELECT geometry::Point(251,1,4326).STUnion(geometry::Point(252,2,4236));

Ví dụ 2:

DECLARE @City1 geography
SET @City1=geography::STPolyFromText('POLYGON((175.3 -41.5,183.3 -37.9,172.8 -34.6,175.3 -41.5))',4326)
DECLARE @City2 geography
SET @City2=geography::STPolyFromText('POLYGON((169.3 -46.6,174.3 -41.6,172.5 -40.7,166.3 -45.8,169.3 -46.6))',4326)
DECLARE @CombinedCity [email protected](@city2)
SELECT @CombinedCity

Một số hàm tổng hợp không gian

Union Aggregate

Nó thực hiện phép toán hợp nhất trên một tập hợp các đối tượng hình học. Nó kết hợp nhiều đối tượng không gian thành một đối tượng không gian duy nhất, loại bỏ ranh giới bên trong, nếu có.

Ví dụ:

SELECT Geography::UnionAggregate  (SpatialLocation) AS AVGLocation
FROM Person.Address
WHERE City='London';

Envelope Aggregate

Ví dụ:

SELECT Geography::EnvelopeAggregate(SpatialLocation) AS Location FROM Person.Address WHERE City='London'

Convex Hull Aggregate

Ví dụ:

SELECT Geography::ConvexHullAggregate(SpatialLocation) AS Location FROM Person.Address
WHERE City='Lodon'

Bài tập

Tạo database QuanlyNhanKhau

Tạo bảng QuanHuyen

Column Datatype Constraint Description
MaQH INT IDENTITY(1,1) NOT NULL Mã quận huyện
TenQH NVARCHAR(100)   Tên quận huyện

Tạo bảng DuongPho

Column Datatype Constraint Description
DuongID INT NOT NULL Mã đươờng
MaQH INT NOT NULL Mã quận huyện
TenDuong NVARCHAR(MAX) NOT NULL Tên Đường
NgayDuyet DATETIME NOT NULL Ngày duyệt tên

Tạo bảng NhaTrenPho

Column Datatype Constraint Description
NhaID INT NOT NULL Mã nhà
DuongID INT NOT NULL Mã đường
ChuHo NVARCHAR(50) NULL Chủ hộ
DienTich MONEY NULL Diện tích
SoNhanKhau int   số nhân khẩu

Tạo ràng buộc cho các bảng:

Primary key

Constraint Name Table Applied Column
PK_QuanHuyen QuanHuyen MaQH
PK_DuongPho DuongPho DuongID
PK_NhaTrenPho NhaTrenPho NhaID

Foreign key

Constraint Name Referencing Table Foreign Key column Referrenced Table Referenced Column
FK_NhaTrenPho_DuongPho NhaTrenPho DuongID DuongPho DuongID
FK_DuongPho_QuanHuyen DuongPho MaQH QuanHuyen MaQH

Ràng buộc CHECK:

Constraint Name Table Applied Columns  Data Annomalies
CK_DuongPho_NgayDuyenTen DuongPho NgayDuyetTen NgayDuyetTen > 02/09/1945 và NgayDuyetTen > current_date

 

Nhập lệu vào bảng thông tin sau:

Lưu ý, khi nhập dữ liệu datetime, có thể sử dụng chuỗi 'yyyy-mm-dd' hoặc CONVERT(DATETIME,CAST('dd/mm/yyy' AS DATETIME),113)

QuanHuyen:

MaQH TenQH
1 Ba Đình
2 Hoàng Mai

DuongPho:

DuongId MaQH TenDuong NgayDuyetTen(dd/mm/yyyy)
1 1 Trường Chinh 19/10/1946
2 1 Tây Sơn 30/12/1998
3 2 Chùa Bộc 21/09/1975

NhaTrenPho:

NhaID DuongID ChuHo DienTich SoNhanKhau
1 1 Toàn Ngô Vĩnh 100 4
2 1 Lê Văn A 20 12
3 2 Nguyễn Thị B 40 1

Sửa bảng (ALTER TABLE) DuongPho, cột [TenDuong] từ 'Chùa Bộc' thành 'Thái Hà'

Bài tập ôn luyện 2:

1. Tạo một file có tên Lab3.sql.

2. Tạo một cơ sở dữ liệu đặt tên là DBLab3.

3. Tạo 4 bảng sau đó chèn dữ liệu vào theo các bước sau:

- Bước 1: Tạo 4 bảng.

- Bước 2: Áp đặt các ràng buộc (constraint) khóa chính và khóa ngoại lên các bảng như mô tả dưới đây (chú ý: sử dụng câu lệnh alter table để đặt các ràng buộc).

- Bước 3: Chèn dữ liệu vào các bảng.

Customer (Lưu mã(cID), tên(cName), tuổi(cAge) và giới tính(cGender) của khách hàng).

cID (int primary key)

cName (VarChar (25))

cAge (tinyint)

cGender (bit)

1

Elisha Cuthbert

26

0

2

Cristiano Ronaldo

23

1

3

Gemma Atkinson

24

0

4

Maria Sharapova

22

Null

Orders (Lưu mã hóa đơn(oID), mã khách hàng(cID) và ngày khởi tạo hóa đơn(oDate)).

oID (int primary key)

cID (int)

(foreign key tham chiếu tới cID của Customer)

oDate (Date)

1

1

3/21/2008

2

2

3/23/2008

3

1

3/16/2008

Product (Lưu mã(pID), tên(pName) và giá của các sản phẩm(pPrice)).

pID (int primary key)

pName (varchar(25))

pPrice (int)

1

Washing Machine

3

2

Fridge

5

3

Air Conditioner

7

4

Electric Fan

1

5

Electric Cooker

2

OrderDetail (Lưu mã hóa đơn(oID), mã sản phẩm(pID) và số lượng sản phẩm(odQTY) trong hóa đơn).

oID (int)

(foreign key tham chiếu tới oID của Order)

pID (int)

(foreign key tham chiếu tới pID của Product)

odQTY (int)

 

1

1

3

1

3

7

1

4

2

2

1

1

3

1

8

2

5

4

2

3

3

4. Hiển thị danh sách các hóa đơn (chú ý: danh sách phải được sắp xếp theo trường oDate).

5. Hiển thị danh sách khách hàng gồm tên và ký tự đầu tiên của tên.

6. Hiển thị những sản phẩm có giá cao nhất.

7. Hiển thị những sản phẩm có giá thấp nhất.

8. Hiển thị danh sách sản phẩm gồm tên và giá kết hợp trong 1 cột như sau:

‘Price of ’ + pName + ‘ is ’ + pPrice.

9. Tạo một bảng đặt tên là ‘Top3Product’ , bảng này chứa 3 sản phẩm có giá cao nhất gồm tên và giá của sản phẩm.

Gợi ý: Bạn nên dùng câu lệnh SELECT với INTO để tạo bảng mới.

10. Hiển thị những khách hàng mà tên có độ dài 15 ký tự.

11. Hiển thị tất cả các sản phẩm có chuỗi ‘Electric’ ở trong pName.

12. Hiển thị ngày giờ hiện tại và ngày giờ hiện tại cộng thêm 5000 phút.

13. Xóa tất cả các khóa ngoại.

14. Xóa tất cả các khóa chính.

15. Xóa tất cả các bảng.

16. Xóa cơ sở dữ liệu.

Bài tập ôn luyện 3:

1. Tạo một file SQL có tên Lab4.sql.

2. Tạo một Cơ sở dữ liệu (CSDL) có tên DBLab4.

3. Tạo 03 bảng như sau:

- Bảng Customers lưu trữ thông tin về khách hàng gồm các cột MaKhach (PK), Ten, SoDienThoai.

- Bảng Items lưu trữ thông tin về hàng hóa gồm các cột MaHang (PK), Ten, SoLuong, DonGia.

- Bảng CustomerItem lưu trữ thông tin về những sản phẩm đã được bán mua gồm các cột MaKhach, MaHang, SoLuongMua, trong đó PK nằm trên 2 cột MaKhach và MaHang, FK1 nằm trên cột MaKhach, FK2 nằm trên cột MaHang.

4. Nhập các thông tin sau vào bảng Items:

Tên sản phẩm

Số lượng

Đơn giá (nghìn đồng)

Tu lanh

5

3500

Ti vi

2

3000

Dieu hoa

1

8000

Quat da

5

1700

May giat

3

5000

5. Tách lọc và nhập thông tin sau vào hai bảng Customers và CustomerItem:

Tên khách hàng

Số điện thoại

Hàng đã mua

Số lượng mua

Dinh Truong Son

1234567

Tu lanh

4

Dinh Truong Son

1234567

May giat

1

Mai Thanh Minh

1357999

Ti vi

1

Nguyen Hong Ha

2468888

Dieu hoa

1

Nguyen Hong Ha

2468888

Tu lanh

1

6. Hiển thị tổng số tiền mà cửa hàng đã thu được từ các khách hàng trên.

7. Hiển thị tên, số tiền đã mua của người khách hàng đã trả tiền cho cửa hàng nhiều nhất.

8. Kiểm tra xem người khách có số điên thoại 2468888 có mua mặt hàng Tủ lạnh không, nếu có mua thì hiện ra dòng chữ 'Có mua', ngược lại hiện ra dòng chữ 'Không mua'.

9. Tính tổng số hàng hóa và tổng tiền còn lại trong kho (số còn lại bằng tổng số trừ đi số đã bán).

10. Hiển thị danh sách 3 mặt hàng bán chạy nhất(số lượng bán nhiều nhất).

11. Hiển thị tất cả các mặt hàng mà chưa bán được một sản phẩm nào.

12. Hiển thị danh sách những người mua nhiều hơn một mặt hàng.

13. Hiển thị danh sách những người mua hàng có số lượng nhiều hơn một cái.

14. Hiển thị tên khách hàng, tổng số tiền mua hàng của từng khách và hiển thị cột Level với giá trị điền vào cột này theo tiêu chí sau: Nếu tổng số tiền mua hàng của từng khách < 5000 thì điền giá trị là 'Level1', từ 5000 đến < 10000 thì điền giá trị là 'Level2', >=10000 thì điền giá trị là 'V.I.P'.

Bài tập ôn luyện 4:

1. Tạo một file có tên Lab5.sql.

2. Tạo một CSDL có tên DBLab5.

3. Tạo ba bảng như sau (Sinh viên tự áp dụng kiểu dữ liệu cho mỗi cột cho hợp lý):

- Bảng Student(RN,Name,Age,Gender).

- Bảng Subject(sID, sName).

- Bảng StudentSubject(RN,sID,Mark,Date).

4. Đặt khóa chính (PK) cho các bảng:

- Bảng Student PK nằm trên cột RN.

- Bảng Subject PK nằm trên cột sID.

- Bảng StudentSubject PK nằm trên hai cột (RN,sID).

5. Đặt ràng buộc để trường Mark chỉ nhận các giá trị trong đoạn [0,10].

6. Đặt ràng buộc khóa ngoại giữa 2 bảng Student(RN) và StudentSubject(RN).

7. Đặt ràng buộc khóa ngoại giữa 2 bảng Subject(sID) và StudentSubject(sID).

8. Nhập dữ liệu vào bảng để thể hiện thông tin sau:

- Học viên Mỹ Linh đạt điểm 8 môn SQL vào ngày 7/28/2005.

- Học viên Đàm Vĩnh Hưng đạt điểm 3 môn LGC vào ngày 7/29/2005.

- Học viên Kim Tử Long đạt điểm 9 môn HTML vào ngày 7/31/2005.

- Học viên Tài Linh đạt điểm 5 môn SQL vào ngày 7/30/2005.

- Học viên Mỹ Lệ đạt điểm 10 môn CF vào ngày 7/19/2005.

- Học viên Ngọc Oanh đạt điểm 9 môn SQL vào ngày 7/25/2005.

9. Cập nhật giới tính cho các học viên:

- Mỹ Linh, Tài Linh, Mỹ Lệ là 0.

- Kim Tử Long là 1.

10. Nhập thêm các môn học sau vào bảng Subject: Core Java và VB.Net.

11. Hiển thị tất cả các môn học mà chưa có học viên nào nhận điểm.

12. Hiển thị danh sách tất cả các môn học, với điểm cao nhất mà học viên đạt được với môn học đó, môn nào chưa có điểm thì để trống (Null) phần điểm.

13. Hiển thị tên môn học mà có nhiều hơn một điểm.

14. Hiển thị những thông tin sau về học viên: RN, sID, Name, Age, Gender, sName, Mark, Date. Lưu ý là đối với trường Gender hiển thị Male thay cho 1, Female thay cho 0 và Unknow thay cho Null.

15. Tạo các Index trên các cột sau: Cột Name của bảng Student, cột sName của bảng Subjects, cột (RN,sID) của bảng StudentSubject.

16. Tạo một bảng tên là Top3 với các cột (RN, Name, Mark, sName, Date) với dữ liệu gồm chỉ 3 dòng có điểm cao nhất, cột Rank sẽ chứa số thứ tự từ 1 đến 3(dòng đầu tiên là 1, dòng thứ 2 là 2 và dòng thứ 3 là 3), còn cột Date sẽ nhận giá trị là ngày cập nhật thông tin.

17. Hiển thị danh sách toàn bộ các học sinh giỏi (Học sinh giỏi là những người có điểm trung bình lớn hơn 8.0 và không có điểm nào dưới 5).

18. Hiển thị danh sách toàn bộ các học sinh khá (Học sinh khá là những người có điểm trung bình lớn hơn 6.5 và chỉ có tối đa 1 điểm dưới 5, và điểm này không được dưới 3).

Bài viết liên quan:

PolyBase, Query Store, và Stretch Database trong SQL Server
Dữ liệu JSON trong SQL Server
Các tính năng nâng cao SQL trong SQL Server 2019
Giới thiệu Azure SQL
Xử lý lỗi và TRY CATCH trong SQL Server
Transaction trong SQL Server
FUNCTION (hàm) trong SQL Server
Lập trình và control of flow trong Transact SQL
Trigger trong SQL Server
Index trong SQL Server
Truy vấn metadata và Dynamyic Management Object trong SQL Server
Stored Procedure trong SQL Server

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

FUNCTION (hàm) trong SQL Server

Vòng lặp và kiểm soát luồng chương trình trong PHP

Biểu thức chính quy (Regular Expression) trong PHP

Biến (Variable) trong PHP

Các kiểu dữ liệu trong PHP

Giới thiệu

web888.vn là chuyên trang chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với web888

© web888.vn - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.

Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our privacy policy.

Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×