Trang chủ > SQL > Mệnh đề GROUP BY, mệnh đề HAVING trong SQL (SQL p13)

Mệnh đề GROUP BY, mệnh đề HAVING trong SQL (SQL p13)

 Các hàm tập hợp (ví dụ như SUM) thông thường cần thêm chức năng của mệnh đề GROUP BY.

GROUP BY

Mệnh đề GROUP BY…được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và nếu không có GROUP BY ta không thể nào tính được tổng của các giá trị theo từng nhóm riêng lẻ trong cột.

Cú pháp của GROUP BY như sau:

SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột

Ví dụ sử dụng GROUP BY:

Giả sử ta có bảng Sales như sau:

Company Amount
W3Schools 5500
IBM 4500
W3Schools 7100

Câu lệnh SQL sau:

SELECT Company, SUM(Amount) FROM Sales

sẽ trả về kết quả:

Company SUM(Amount)
W3Schools 17100
IBM 17100
W3Schools 17100

Kết quả trả về ở trên đôi khi không phải là cái mà ta mong đợi. Ta thêm mệnh đề GROUP BY vào trong câu lệnh SQL:

SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company

và kết quả trả về lần này sẽ là:

Company SUM(Amount)
W3Schools 12600
IBM 4500

Kết quả này đúng là cái mà ta mong muốn.

HAVING

Mệnh đề HAVING…được thêm vào SQL vì mệnh đề WHERE không áp dụng được đối với các hàm tập hợp (như SUM). Nếu không có HAVING, ta không thể nào kiểm tra được điều kiện với các hàm tập hợp.

Cú pháp của HAVING như sau:

SELECT tên_cột, SUM(tên_cột) FROM tên_bảng
GROUP BY tên_cột
HAVING SUM(tên_cột) điều_kiện giá_trị

Ta sử dụng lại bảng Sales ở trên. Câu lệnh SQL sau:

SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company
HAVING SUM(Amount) > 10000

sẽ trả về kết quả:

Company SUM(Amount)
W3Schools 12600
Advertisements
Chuyên mục:SQL
  1. fsdsds
    26/11/2011 lúc 08:30

    hay lắm

  2. 04/12/2011 lúc 08:24

    Cảm ơn bạn vì nó rất ý nghĩa ^^

  3. 10/12/2011 lúc 03:16

    thannks bạn ! bài viết rất hữu ích

  4. niu
    26/12/2011 lúc 14:00

    thanks bạn..rấy hay..:)

  5. 07/02/2012 lúc 04:42

    GROUP BY ko phần biệt chữ có dấu và ko dấu, giúp với

  6. KKI
    22/02/2012 lúc 14:20

    than’k bAN NHIU!!!!!

  7. votam
    23/04/2012 lúc 10:54

    rất tuyệt bạn ak. có gì thì bạn có thể post lên nhiều cái về sql đi
    thank bạn nhiều

  8. Toan Nguyen
    18/05/2012 lúc 06:51

    good!

  9. Haeki
    28/05/2012 lúc 04:02

    muốn biết nhiều về SQL thì lên w3schools.com mà học
    P/s:
    bạn nào có thể cho tớ hỏi là nếu tớ có 1 listview gồm có các column:
    Mã quản lý trạm | Ngày | Ia | Ib | Ic |
    A1-1 20-5 5 7 10
    A1-2 20-5 10 20 15

    bgio tớ muốn lập 1 record mới với tên là A1 tổng, ngày lưu số liệu là 20/5, và:
    Ia – tong = Ia 1 + Ia 2
    Ib – tong = ib1 + Ib 2
    Ic – tong = Ic1 + Ic2
    Hiện tớ đã lưu đc dữ liệu của A1-1 và A1-2 vào csdl của access rôi, nhưng bgio tớ muốn có 1 cái tông như thế thì giải pháp làm ntn

  10. chuotcongpt
    30/05/2012 lúc 01:50

    thanksss

  11. hoang
    08/06/2012 lúc 03:15

    thanks ban nhiu nha…

  12. 10/06/2012 lúc 09:45

    hay lắm

  13. baby_cute
    13/06/2012 lúc 18:14

    thầy mình lại dạy khác chứ. cái mệnh đề group by chỉ là để nhóm 1 nhóm các thuộc tính với nhau, còn having là điều kiện chọn của nhóm đó.

  14. truongpc
    18/07/2012 lúc 07:59

    Very good! Thanks

  15. Minh
    24/10/2012 lúc 15:15

    Thanks

  16. hau
    29/10/2012 lúc 08:41

    cam on bai viet rat hay

  17. 07/03/2013 lúc 01:12

    lần đầu tiên hiểu 2 mệnh đề này, từ bài viết bạn

  18. hero
    02/04/2013 lúc 04:09

    cám ơn, bài viết rất hay

  19. anhsaokhuya
    17/08/2013 lúc 18:51

    hay tuyệt

  20. 20/08/2013 lúc 04:01

    Bài viết hay lắm. Thanks bạn nhé!

  21. pices
    29/08/2013 lúc 04:22

    cám ơn bạn

  22. 04/10/2013 lúc 16:33

    hay .cam on nhe

  23. Phan Van Ngo
    05/12/2013 lúc 03:03

    Cậu ơi cho mình hỏi, nếu điều kiện trong hàm having của mình là đưa ra tên company có tổng lượng sales là MIN hoặc MAX thì làm thế nào nhỉ? Cậu chỉ giúp mình với.Thanks.

  24. 23/12/2014 lúc 07:31

    rất hay, thanks so much

  25. Theanh
    29/12/2014 lúc 07:40

    hay quá. cảm ơn bạn nhiều!

  26. 09/03/2015 lúc 07:28

    lại hiểu thêm nữa oy thanks so much

  27. qừqw
    17/06/2015 lúc 07:21

    eqqef

  28. Nguyễn Văn Diệm
    29/11/2015 lúc 01:40

    rất gọn và dễ hiểu, thank bạn…

  29. 20/06/2016 lúc 07:53

    cảm ơn bài viết <3 rất có ít với mình

  30. 07/09/2016 lúc 14:07

    cảm ơn bài viết của bạn…

  1. No trackbacks yet.

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: