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

GROUP BY không xóa các bản sao

GROUP BY không "xóa các bản sao". GROUP BY cho phép tổng hợp. Nếu tất cả những gì bạn muốn là kết hợp các hàng trùng lặp, hãy sử dụng CHỌN DISTINCT.

Nếu bạn cần kết hợp các hàng trùng lặp trong một số cột, hãy sử dụng GROUP BY nhưng bạn cần chỉ định những việc cần làm với các cột khác. Bạn có thể bỏ qua chúng (bằng cách không liệt kê chúng trong mệnh đề SELECT) hoặc tổng hợp chúng (sử dụng các hàm như SUM, MIN và AVG). Ví dụ:

SELECT watch.watch_id, COUNT(rec.street_number), MAX(watch.watch_date)
... GROUP by watch.watch_id

CHỈNH SỬA

OP đã yêu cầu làm rõ một số điều.

Hãy xem xét "chế độ xem" - tất cả dữ liệu được tổng hợp bởi FROMs và JOIN và WHEREs - gọi đó là V. Có hai điều bạn có thể muốn làm.

Đầu tiên, bạn có thể có các hàng hoàn toàn trùng lặp mà bạn muốn kết hợp:

a b c
- - -
1 2 3
1 2 3
3 4 5

Sau đó, chỉ cần sử dụng DISTINCT

SELECT DISTINCT * FROM V;

a b c
- - -
1 2 3
3 4 5

Hoặc, bạn có thể có các hàng trùng lặp một phần mà bạn muốn kết hợp:

a b c
- - -
1 2 3
1 2 6
3 4 5

Hai hàng đầu tiên "giống nhau" theo một nghĩa nào đó, nhưng rõ ràng khác nhau theo một nghĩa khác (cụ thể là chúng sẽ không được kết hợp bởi SELECT DISTINCT). Bạn phải quyết định cách kết hợp chúng. Bạn có thể loại bỏ cột c vì không quan trọng:

SELECT DISTINCT a,b FROM V;

a b
- -
1 2
3 4

Hoặc bạn có thể thực hiện một số loại tổng hợp trên chúng. Bạn có thể thêm chúng vào:

SELECT a,b, SUM(c) "tot" FROM V GROUP BY a,b;

a b tot
- - ---
1 2 9
3 4 5

Bạn có thể thêm chọn giá trị nhỏ nhất:

SELECT a,b, MIN(c) "first" FROM V GROUP BY a,b;

a b first
- - -----
1 2 3
3 4 5

Hoặc bạn có thể lấy giá trị trung bình (AVG), độ lệch chuẩn (STD) và bất kỳ hàm nào trong số các hàm khác nhận nhiều giá trị cho c và kết hợp chúng thành một.

Những gì không thực sự là một lựa chọn chỉ là không làm gì cả. Nếu bạn chỉ liệt kê các cột chưa được phân nhóm, DBMS sẽ xuất hiện một lỗi (Oracle thực hiện điều đó - lựa chọn đúng, imo) hoặc chọn một giá trị nhiều hơn hoặc ít hơn một cách ngẫu nhiên (MySQL). Nhưng như Tiến sĩ Peart đã nói, "Khi bạn không quyết định, bạn vẫn có một sự lựa chọn."



  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 cách nào để lấy dấu thời gian Unix trong MySQL từ thời gian UTC?

  2. Mysql:Chuyển đổi DB từ giờ địa phương sang UTC

  3. kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần '' tại dòng 1

  4. Thao tác dữ liệu người dùng trong MySQL

  5. Làm thế nào để tạo cơ sở dữ liệu Mysql để hỗ trợ Ngôn ngữ Ả Rập?