Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เลือก DISTINCT เทียบกับ GROUP BY ใน MySQL หรือไม่


SELECT DISTINCT สามารถใช้เพื่อให้ค่าที่แตกต่างกัน ใช้เพื่อลบบันทึกที่ซ้ำกัน และสามารถใช้กับฟังก์ชันรวมได้เช่นกัน ตัวอย่างเช่น MAX, AVG เป็นต้น สามารถใช้ได้กับคอลัมน์เดียว

ตอนนี้ ฉันกำลังสร้างตารางเพื่อใช้ SELECT DISTINCT สำหรับคอลัมน์ การสร้างตารางด้วยคำสั่ง CREATE -

mysql> สร้างตาราง DistinctDemo-> (-> id int,-> ชื่อ varchar(100)-> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.64 วินาที)

การแทรกบันทึก -

mysql> INSERT เป็นค่า DistinctDemo (1,'John');Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที)mysql> INSERT เป็นค่า DistinctDemo (2,'John'); Query OK, 1 แถวได้รับผลกระทบ (0.18 วินาที )mysql> INSERT เป็นค่า DistinctDemo (3,'Bob');Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที)mysql> INSERT เป็นค่า DistinctDemo (4,'John');Query OK, 1 แถวได้รับผลกระทบ (0.15 วินาที)mysql> INSERT เป็นค่า DistinctDemo (5,'David'); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.17 วินาที) mysql> INSERT เป็นค่า DistinctDemo (6,'Bob'); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.16 วินาที)

แสดงระเบียนทั้งหมดโดยใช้คำสั่ง SELECT แบบสอบถามมีดังนี้ −

mysql> SELECT * จาก DistinctDemo;

หลังจากดำเนินการค้นหาข้างต้น เราจะได้ผลลัพธ์ต่อไปนี้ -

<ก่อนหน้า>+------+-------+| id | ชื่อ |+------+-------+| 1 | จอห์น || 2 | จอห์น || 3 | บ๊อบ || 4 | จอห์น || 5 | เดวิด || 6 | Bob |+------+-------+6 แถวในชุด (0.00 วินาที)

ด้านบน เรามีหกระเบียนที่ John และ Bob ซ้ำกัน เราสามารถใช้ DISTINCT เพื่อลบระเบียนที่ซ้ำกัน ไวยากรณ์มีดังนี้ −

เลือก differentcolumn_name จากลำดับ yourTableName ตาม column_name;

ตอนนี้ฉันกำลังใช้แบบสอบถามด้านบนเพื่อลบรายการที่ซ้ำกัน -

mysql> เลือกชื่อที่แตกต่างจาก DistinctDemo

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+-------+| ชื่อ |+-------+| จอห์น || บ๊อบ || David |+-------+3 แถวในชุด (0.00 วินาที)

Select group by สามารถใช้เพื่อรับข้อมูลจากคอลัมน์ต่างๆ และจัดกลุ่มเป็นหนึ่งหรือหลายคอลัมน์ นอกจากนี้ยังใช้กับฟังก์ชันการรวมได้อีกด้วย ตัวอย่างเช่น SUM, AVG เป็นต้น

ประการแรก ฉันกำลังสร้างตารางโดยใช้คำสั่ง CREATE -

mysql> สร้างตาราง GroupDemo1-> (-> id int,-> name varchar(100),-> address varchar(100)-> );Query OK, 0 แถวได้รับผลกระทบ (0.68 วินาที)

หลังจากสร้างตารางแล้ว ฉันกำลังแทรกบันทึกลงในตารางซึ่งมีรายละเอียดดังนี้ −

mysql> INSERT ลงในค่า GroupDemo1 (1,'John','US'); ตกลง, 1 แถวได้รับผลกระทบ (0.18 วินาที)mysql> INSERT ลงในค่า GroupDemo1 (2,'Bob','UK');แบบสอบถาม ตกลง ได้รับผลกระทบ 1 แถว (0.13 วินาที)mysql> INSERT ลงในค่า GroupDemo1 (3,'David','US'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.12 วินาที)mysql> INSERT ลงในค่า GroupDemo1 (4,'David', 'US');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.15 วินาที)

ตอนนี้ เราสามารถแสดงระเบียนทั้งหมดโดยใช้คำสั่ง SELECT -

mysql> SELECT * จาก GroupDemo1;

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+------+-------+---------+| id | ชื่อ | ที่อยู่ |+------+-------+---------+| 1 | จอห์น | สหรัฐอเมริกา || 2 | บ๊อบ | สหราชอาณาจักร || 3 | เดวิด | สหรัฐอเมริกา || 4 | เดวิด | US |+------+-------+---------+4 แถวในชุด (0.00 วินาที)

ฉันจะใช้ GROUP BY เพื่อทราบที่อยู่เดียวกันกับจำนวนครั้ง นี่คือไวยากรณ์ −

SELECT column_name1,......N ฟังก์ชันการรวม ( ) จากกลุ่ม yourTableName bycolumn_name;

ให้เราใช้ไวยากรณ์ข้างต้นกับ GROUP BY -

mysql> เลือกที่อยู่ จำนวน (*) จาก GroupDemo1 ตามที่อยู่

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+---------+----------+| ที่อยู่ | นับ(*) |+---------+----------+| สหรัฐอเมริกา | 3 || สหราชอาณาจักร | 1 |+---------+----------+2 แถวในชุด (0.00 วินาที)