Computer >> Máy Tính >  >> Lập trình >> MySQL

CHỌN DISTINCT so với GROUP BY trong MySQL?

SELECT DISTINCT có thể được sử dụng để cung cấp các giá trị riêng biệt. Sử dụng nó để loại bỏ các bản ghi trùng lặp và nó cũng có thể được sử dụng với chức năng tổng hợp. Ví dụ:MAX, AVG, v.v. Điều này có thể được áp dụng trên một cột duy nhất.

Bây giờ, tôi đang tạo một bảng để sử dụng CHỌN DISTINCT cho một cột. Tạo bảng với sự trợ giúp của lệnh CREATE -

mysql> CREATE TABLE DistinctDemo
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.64 sec)

Chèn hồ sơ -

mysql> INSERT into DistinctDemo values(1,'John');
Query OK, 1 row affected (0.17 sec)

mysql> INSERT into DistinctDemo values(2,'John');
Query OK, 1 row affected (0.18 sec)

mysql> INSERT into DistinctDemo values(3,'Bob');
Query OK, 1 row affected (0.17 sec)

mysql> INSERT into DistinctDemo values(4,'John');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT into DistinctDemo values(5,'David');
Query OK, 1 row affected (0.17 sec)

mysql> INSERT into DistinctDemo values(6,'Bob');
Query OK, 1 row affected (0.16 sec)

Hiển thị tất cả các bản ghi với sự trợ giúp của lệnh SELECT. Truy vấn như sau -

mysql> SELECT * from DistinctDemo;

Sau khi thực hiện truy vấn trên, chúng ta sẽ nhận được kết quả sau -

+------+-------+
| id   | name  |
+------+-------+
| 1    | John  |
| 2    | John  |
| 3    | Bob   |
| 4    | John  |
| 5    | David |
| 6    | Bob   |
+------+-------+
6 rows in set (0.00 sec)

Ở trên, chúng tôi có sáu bản ghi mà John và Bob bị trùng lặp. Chúng tôi có thể áp dụng DISTINCT để loại bỏ các bản ghi trùng lặp. Cú pháp như sau -

SELECT distinctcolumn_name from yourTableName order by column_name;

Bây giờ, tôi đang áp dụng truy vấn trên để xóa các bản sao -

mysql> SELECT distinct name from DistinctDemo;

Sau đây là kết quả

+-------+
| name  |
+-------+
| John  |
| Bob   |
| David |
+-------+
3 rows in set (0.00 sec)

Chọn nhóm theo có thể được sử dụng để lấy dữ liệu từ các cột khác nhau và nhóm thành một hoặc nhiều cột. Điều này cũng có thể được áp dụng với hàm tổng hợp. Ví dụ:SUM, AVG, v.v.

Đầu tiên, tôi đang tạo một bảng với sự trợ giúp của lệnh CREATE -

mysql> CREATE table GroupDemo1
-> (
-> id int,
-> name varchar(100),
-> address varchar(100)
-> );
Query OK, 0 rows affected (0.68 sec)

Sau khi tạo bảng, tôi đang chèn bản ghi vào bảng như sau -

mysql> INSERT into GroupDemo1 values(1,'John','US');
Query OK, 1 row affected (0.18 sec)

mysql> INSERT into GroupDemo1 values(2,'Bob','UK');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT into GroupDemo1 values(3,'David','US');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT into GroupDemo1 values(4,'David','US');
Query OK, 1 row affected (0.15 sec)

Bây giờ, chúng ta có thể hiển thị tất cả các bản ghi với sự trợ giúp của lệnh SELECT -

mysql> SELECT * from GroupDemo1;

Sau đây là kết quả -

+------+-------+---------+
| id   | name  | address |
+------+-------+---------+
| 1    | John  | US      |
| 2    | Bob   | UK      |
| 3    | David | US      |
| 4    | David | US      |
+------+-------+---------+
4 rows in set (0.00 sec)

Tôi sẽ áp dụng GROUP BY để biết cùng một địa chỉ với số lần xuất hiện. Đây là thesyntax -

SELECT column_name1,......N aggregate function( ) from yourTableName group by
column_name;

Hãy để chúng tôi áp dụng cú pháp trên cho GROUP BY -

mysql> SELECT address, count(*) from GroupDemo1 group by address;

Sau đây là kết quả -

+---------+----------+
| address | count(*) |
+---------+----------+
| US      | 3        |
| UK      | 1        |
+---------+----------+
2 rows in set (0.00 sec)