คุณใช้อันไหนโดยทั่วไป? ตัวอย่างเป็นกำลังใจอย่างยิ่ง!
ฉันอ้างถึง MySql แต่นึกไม่ออกว่าแนวคิดที่แตกต่างไปจาก DBMS อื่น
คุณใช้อันไหนโดยทั่วไป? ตัวอย่างเป็นกำลังใจอย่างยิ่ง!
ฉันอ้างถึง MySql แต่นึกไม่ออกว่าแนวคิดที่แตกต่างไปจาก DBMS อื่น
คำตอบ:
ORDER BY จะเปลี่ยนลำดับการคืนสินค้า
GROUP BY จะรวมระเบียนตามคอลัมน์ที่ระบุซึ่งช่วยให้คุณสามารถใช้ฟังก์ชันการรวมในคอลัมน์ที่ไม่ได้จัดกลุ่ม (เช่น SUM, COUNT, AVG เป็นต้น)
ORDER BY จะเปลี่ยนลำดับการคืนสินค้า
GROUP BY จะรวมระเบียนตามคอลัมน์ที่ระบุซึ่งช่วยให้คุณสามารถใช้ฟังก์ชันการรวมในคอลัมน์ที่ไม่ได้จัดกลุ่ม (เช่น SUM, COUNT, AVG เป็นต้น)
TABLE:
ID NAME
1 Peter
2 John
3 Greg
4 Peter
SELECT *
FROM TABLE
ORDER BY NAME
=
3 Greg
2 John
1 Peter
4 Peter
SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME
=
1 Greg
1 John
2 Peter
SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1
=
Peter
age
คอลัมน์โดย Peters มีอายุต่างกันและแบบสอบถามคือ SELECT NAME, AGE FROM TABLE GROUP BY NAME?
ORDER BY:เรียงลำดับข้อมูลจากน้อยไปมากหรือมากไปหาน้อย
พิจารณาตารางลูกค้า :
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
ต่อไปนี้เป็นตัวอย่างซึ่งจะเรียงลำดับผลลัพธ์จากน้อยไปหามากตาม NAME:
SQL> SELECT * FROM CUSTOMERS
ORDER BY NAME;
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
+----+----------+-----+-----------+----------+
GROUP BY:จัดเรียงข้อมูลที่เหมือนกันเป็นกลุ่ม
ตอนนี้ตารางCUSTOMERSมีระเบียนต่อไปนี้ที่มีชื่อซ้ำกัน:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Ramesh | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | kaushik | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
หากคุณต้องการจัดกลุ่มชื่อที่เหมือนกันเป็นชื่อเดียวแบบสอบถาม GROUP BY จะเป็นดังนี้:
SQL> SELECT * FROM CUSTOMERS
GROUP BY NAME;
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้: (สำหรับชื่อที่เหมือนกันระบบจะเลือกชื่อสุดท้ายและเรียงลำดับคอลัมน์จากน้อยไปหามากในที่สุด)
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 4 | kaushik | 25 | Mumbai | 6500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 2 | Ramesh | 25 | Delhi | 1500.00 |
+----+----------+-----+-----------+----------+
ตามที่คุณได้อนุมานว่าไม่มีประโยชน์หากไม่มีฟังก์ชัน SQL เช่น sum, avg เป็นต้น ..
ดังนั้นให้อ่านคำจำกัดความนี้เพื่อทำความเข้าใจการใช้ GROUP BY อย่างเหมาะสม:
คำสั่ง GROUP BY ทำงานบนแถวที่ส่งคืนโดยแบบสอบถามโดยการสรุปแถวที่เหมือนกันเป็นกลุ่มเดียว / กลุ่มที่แตกต่างกันและส่งกลับแถวเดียวพร้อมกับสรุปสำหรับแต่ละกลุ่มโดยใช้ฟังก์ชัน Aggregate ที่เหมาะสมในรายการ SELECT เช่น COUNT (), SUM (), MIN (), MAX (), AVG () ฯลฯ
ตอนนี้หากคุณต้องการทราบจำนวนเงินเดือนทั้งหมดของลูกค้าแต่ละราย (ชื่อ) แบบสอบถาม GROUP BY จะเป็นดังนี้:
SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
GROUP BY NAME;
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้: (ผลรวมของเงินเดือนของชื่อที่เหมือนกันและจัดเรียงคอลัมน์ NAME หลังจากลบชื่อที่เหมือนกัน)
+---------+-------------+
| NAME | SUM(SALARY) |
+---------+-------------+
| Hardik | 8500.00 |
| kaushik | 8500.00 |
| Komal | 4500.00 |
| Muffy | 10000.00 |
| Ramesh | 3500.00 |
+---------+-------------+
ความแตกต่างคือความหมายของชื่อ: กลุ่มโดยดำเนินการจัดกลุ่มและเรียงลำดับตามประเภท
หากคุณทำเช่นSELECT * FROM Customers ORDER BY Name
นั้นคุณจะได้รับรายการผลลัพธ์ที่จัดเรียงตามชื่อลูกค้า
หากคุณSELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive
ได้รับจำนวนลูกค้าที่ใช้งานและไม่ได้ใช้งาน จัดกลุ่มโดยรวมผลลัพธ์ตามฟิลด์ที่คุณระบุ
มีความหมายแตกต่างกันโดยสิ้นเชิงและไม่เกี่ยวข้องกันเลย
ORDER BYช่วยให้คุณสามารถจัดเรียงชุดผลลัพธ์ตามเกณฑ์ที่แตกต่างกันเช่นเรียงลำดับแรกตามชื่อจาก az จากนั้นจัดเรียงตามราคาสูงสุดไปต่ำสุด
(สั่งซื้อตามชื่อราคา DESC)
GROUP BYช่วยให้คุณสามารถใช้ชุดผลลัพธ์ของคุณจัดกลุ่มเป็นกลุ่มตรรกะแล้วเรียกใช้การสืบค้นแบบรวมในกลุ่มเหล่านั้น ตัวอย่างเช่นคุณสามารถเลือกพนักงานทั้งหมดจัดกลุ่มตามสถานที่ทำงานและคำนวณเงินเดือนเฉลี่ยของพนักงานทุกคนในสถานที่ทำงานแต่ละแห่ง
ง่ายORDER BY
สั่งข้อมูลและGROUP BY
กลุ่มหรือรวมข้อมูล
ORDER BY
จัดลำดับผลลัพธ์ที่กำหนดตามฟิลด์ที่กล่าวถึงโดยค่าเริ่มต้นตามลำดับจากน้อยไปหามาก
สมมติว่าคุณกำลังเรียกใช้แบบสอบถามเนื่องจากORDER BY (student_roll_number)
จะแสดงผลลัพธ์จากน้อยไปหามากของจำนวนม้วนของนักเรียน ที่นี่student_roll_number
รายการอาจเกิดขึ้นมากกว่าหนึ่งครั้ง
ในGROUP BY
กรณีนี้เราใช้สิ่งนี้กับฟังก์ชันการรวมและจัดกลุ่มข้อมูลตามฟังก์ชันการรวมและเราจะได้ผลลัพธ์ ที่นี่หากคำถามของเรามีSUM (marks)
พร้อมด้วยGROUP BY (student_first_name)
จะแสดงผลรวมของเครื่องหมายของนักเรียนที่อยู่ในแต่ละกลุ่ม (โดยที่สมาชิกทุกคนในกลุ่มจะมีชื่อเดียวกัน)
GROUP BY ใช้เพื่อจัดกลุ่มแถวในการเลือกโดยปกติแล้วเมื่อรวมแถว (เช่นการคำนวณผลรวมค่าเฉลี่ย ฯลฯ สำหรับชุดของแถวที่มีค่าเดียวกันสำหรับบางฟิลด์)
ORDER BY ใช้เพื่อเรียงลำดับแถวที่เกิดจากคำสั่ง select
ตัวอย่างที่ดีที่นั่น เช่นเดียวกับการเพิ่มของฉันเองจาก webcheatsheet ซึ่งให้ตัวอย่างที่ชัดเจนและให้คุณเรียกใช้ SQL ของคุณเอง
ORDER BY
แสดงเขตข้อมูลจากน้อยไปมากหรือมากไปหาน้อย ในขณะที่GROUP BY
แสดงชื่อฟิลด์เดียวกัน id ฯลฯ ในเอาต์พุตเดียวเท่านั้น
ควรสังเกตว่าGROUP BY
ไม่จำเป็นเสมอไปเนื่องจาก (อย่างน้อยใน PostgreSQL และมีแนวโน้มในตัวแปร SQL อื่น ๆ ) คุณสามารถใช้ORDER BY
กับรายการและคุณยังสามารถใช้ASC
หรือDESC
ต่อคอลัมน์ ...
SELECT name_first, name_last, dob
FROM those_guys
ORDER BY name_last ASC, name_first ASC, dob DESC;