PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Có nhóm theo điều khoản - elein’s GeneralBits

Một số người cố gắng tránh các mệnh đề GROUP BY và HAVING trong truy vấn của họ. Các thông báo lỗi khá phức tạp nhưng chúng thường đúng. Các từ khóa GROUP BY và HAVING rất cần thiết cho việc báo cáo SQL tốt.

Lý do chính cho GROUP BY là để giảm số lượng hàng, thường là bằng cách tổng hợp. Nó chỉ tạo ra một hàng cho mỗi nhóm phù hợp từ đầu vào. Điều này cho phép bạn thực hiện các phép tính phức tạp thông qua SQL thông thường.

Ví dụ về trái cây:

Chúng tôi có một số trái cây:

Trường hợp tiếp theo này cho phép chúng tôi nhìn về phía trước. Tết trung thu sẽ có những loại quả gì? Chúng tôi thực hiện điều này với truy vấn tương tự như trên, tuy nhiên, sau khi truy vấn chạy, chúng tôi kiểm tra các giá trị của min (fresh_until) bằng cách sử dụng mệnh đề có. CÓ là cách bạn đủ điều kiện cho một tổng hợp.

Tất cả táo và nho sẽ có sẵn vào giữa năm.

Danh sách các mục giữa SELECT và FROM, danh sách mục tiêu. có thể chứa phi tập hợp và tập hợp. Các cột không tổng hợp đó trong danh sách mục tiêu
phải nằm trong nhóm theo mệnh đề. Thông báo lỗi cho biết như vậy. Thứ tự của các cột trong nhóm theo mệnh đề quan trọng. Nó xác định cách các tập hợp được nhóm lại. Thứ tự thường có thứ bậc. Điều đó có ý nghĩa gì đối với các cột của bạn là trọng tâm của bạn. Đó có thể là trái cây, hoặc các nguồn và / hoặc tươi_còn đến ngày.

Các ví dụ về chơi bài

Hãy xem xét một loạt các ví dụ khác minh họa việc trích xuất thông tin về cách chơi bài. Bạn có thể tìm hiểu về các loại thẻ trên Wikipedia Standard Cards.

Giả sử bạn xử lý sáu bàn tay 5 lá theo chương trình, giống như sáu người chơi poker. Tổng cộng có 30 thẻ được sử dụng trong thương vụ này. Họ đang ở trong một bàn tay bảng như sau, trong đó tên của các thẻ và bộ quần áo được kết hợp với các bảng tra cứu. Chúng tôi lưu trữ thứ hạng để chúng tôi có thể sắp xếp hợp lý. Chúng tôi sử dụng tên để hiển thị. Tên và cấp bậc có mối quan hệ 1-1 đối với mỗi thẻ và bộ đồ.

Số lượng phù hợp cho mỗi tay là bao nhiêu? Chúng tôi thực sự chỉ quan tâm đến bất kỳ ván bài nào có 3 lá bài giống nhau trở lên. Điều đó sẽ cho chúng ta biết ai là người có cơ hội tốt hơn cho một cú poker. Lưu ý rằng mặc dù GROUP BY dường như ngụ ý ORDER BY, nhưng không phải vậy. ORDER BY phải rõ ràng.

Vì vậy, điều gì sẽ xảy ra nếu bạn nhóm sai truy vấn của mình? Nếu tay này bảng không được nhóm theo handid, khi đó bạn sẽ nhận được 30 bản ghi của 6 tay của 5 quân bài. Nếu bạn có tổng hợp, chúng sẽ được nhóm lại theo hàng. Không hữu ích lắm.

Nếu bạn tổng hợp tên thẻ và không bao gồm
tên thẻ riêng trong danh sách mục tiêu và cố gắng sắp xếp theo tên thẻ,
bạn sẽ nhận được thông báo lỗi rằng nó không nên có trong
thứ tự theo mệnh đề. Mệnh đề theo thứ tự phải chứa các yếu tố
của nhóm theo mệnh đề.
Tuy nhiên, nếu tên thẻ có trong danh sách mục tiêu một cách rõ ràng,

thì tên thẻ phải nằm trong nhóm theo điều khoản và
do đó được phép theo thứ tự theo điều khoản.

Nếu truy vấn theo bộ, sẽ có tối thiểu 1 hoặc tối đa 4 bản ghi cho mỗi bộ cho mỗi tay trong số sáu bài. Lưu ý rằng chúng tôi đang sắp xếp theo thứ hạng phù hợp với
những thứ cũng phải nằm trong nhóm theo mệnh đề. su_name và su_rank có mối quan hệ 1-1.

Để xem sự phân phối của các thẻ vào tay, Chúng ta phải nhóm theo cột hạng thẻ. Tất nhiên, mỗi quân bài có 4 bộ quần áo, vì vậy bạn sẽ không thấy một quân bài nào có nhiều hơn bốn ván bài.

Để xem ai đang cầm quân át chủ bài, chúng ta có thể sử dụng truy vấn ngắn sau. Lưu ý rằng có một mệnh đề WHERE được thực thi trong khi thu thập các hàng. HAVING được thực thi sau khi các hàng được thu thập.

Tóm tắt

Những ví dụ này là những cách đơn giản để đánh giá các thực thể đã biết. Thử nghiệm và sử dụng các quy tắc đơn giản này.

  • Nếu một cột nằm trong danh sách đích chứ không phải một cột tổng hợp, thì cột đó phải nằm trong mệnh đề GROUP BY.
  • Mệnh đề WHERE xảy ra trong quá trình lựa chọn.
  • Các mệnh đề HAVING xuất hiện sau khi tổng hợp được hoàn thành.
  • Chỉ các tập hợp không phải là tổng hợp mới có thể nằm trong mệnh đề ORDER BY.
  • Thứ tự của mệnh đề GROUP BY rất quan trọng.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để thay đổi cổng nghe postgresql trong windows?

  2. Sử dụng pg_dump để chỉ nhận các câu lệnh chèn từ một bảng trong cơ sở dữ liệu

  3. múi giờ mặc định của postgres

  4. Trả lại id nếu một hàng tồn tại, INSERT nếu không

  5. Làm cách nào để thực hiện cập nhật không chặn lớn trong PostgreSQL?