3.1 Câu lệnh GROUP BY

Ngôn ngữ SQL rất mạnh mẽ. Ngoài việc tìm nạp dữ liệu đơn giản, nó cho phép bạn nhóm dữ liệu tại thời điểm truy vấn. Ví dụ chúng ta muốn biết mỗi thương hiệu chúng ta có bao nhiêu loại sản phẩm thì làm như thế nào?

Có một toán tử đặc biệt cho this GROUP BY, đây là cách nó được viết.

GROUP BY column

Hãy viết một truy vấn yêu cầu SQL hiển thị số loại sản phẩm cho mỗi thương hiệu. Một yêu cầu như vậy sẽ giống như thế này:

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

Bạn sẽ nhận được kết quả truy vấn sau:

thương hiệu đếm(*)
(VÔ GIÁ TRỊ) 2
Bosch 4
IKEA 6
LG 2
hoa thông minh 1

Hãy phân tích cẩn thận loại yêu cầu chúng tôi đã viết và loại kết quả chúng tôi nhận được. Kết quả là, chúng ta thấy hai cột. Đầu tiên với một danh sách các thương hiệu, đó là hợp lý. Chúng tôi muốn nhận được thứ gì đó giống như một tập hợp các cặp "thương hiệu -> số lượng" .

Xin lưu ý rằng trong số các tên thương hiệu có một từ NULL. Thật vậy, chúng tôi có các sản phẩm trong thương hiệu được viết NULLvà chúng tôi thấy chúng ở đây. Một chút bất ngờ, nhưng hữu ích. Chúng ta có thể thấy có bao nhiêu sản phẩm không có thương hiệu.

Bây giờ chúng ta hãy xem xét kỹ hơn yêu cầu. Chúng tôi muốn biết số lượng sản phẩm của mỗi thương hiệu, vì vậy chúng tôi đã viết GROUP BY brand, và trong đó SELECTchúng tôi đã viết thương hiệu và biểu thứcCOUNT(*)

COUNT(*)là cái gọi là hàm tổng hợp được thực hiện trên một nhóm hàng. Trong trường hợp của chúng tôi, cô ấy chỉ cần đếm số lượng của họ. Có rất nhiều chức năng như vậy và chúng ta sẽ xem xét chúng sau.

3.2 Truy vấn phức tạp với GROUP BY

Bây giờ, hãy viết một truy vấn trong đó đầu tiên chúng ta loại bỏ các sản phẩm có giá nhỏ hơn 10, sau đó nhóm chúng lại. Một yêu cầu như vậy sẽ giống như thế này:

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

Bạn sẽ nhận được kết quả truy vấn sau:

thương hiệu đếm(*)
Bosch 4
IKEA 5
LG 2
hoa thông minh 1

Tất cả các sản phẩm NULL đã biến mất khỏi bảng kết quả của chúng tôi vì chúng rất rẻ và số lượng sản phẩm IKEA đã giảm 1. Từ 6 xuống còn 5.

Điều này gợi ý rằng trước tiên bạn áp dụng WHEREcác dòng mong muốn để lọc và chỉ sau đó áp dụng nhóm cho kết quả.

3.3 Tên các cột của kết quả

Nhân tiện, bạn có thể đặt tên cho các cột kết quả. Xem cách máy chủ đề xuất tên count(*)? Hãy thay thế nó bằng tổng số. Một yêu cầu như vậy sẽ giống như thế này:

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

Bạn sẽ nhận được kết quả truy vấn sau:

thương hiệu tổng cộng
Bosch 4
IKEA 5
LG 2
hoa thông minh 1

Bạn cũng có thể đổi tên các cột hiện có. Hãy lấy một trong các truy vấn được sử dụng trước đó và thêm tên mới vào các cột.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

Bạn sẽ nhận được kết quả truy vấn sau:

ID sản phẩm tên sản phẩm giá
2 Cái ghế 5,00
số 8 Đèn 15.00