คุณใช้อันไหนโดยทั่วไป? ตัวอย่างเป็นกำลังใจอย่างยิ่ง!
ฉันอ้างถึง 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;