ภาพโดย Freepik
SQL (Structured Query Language) เป็นภาษาโปรแกรมที่ใช้สำหรับจัดการและจัดการข้อมูล นั่นคือสาเหตุที่คำสั่ง SQL มีความสำคัญมากสำหรับการโต้ตอบกับฐานข้อมูลในลักษณะที่มีโครงสร้างและมีประสิทธิภาพ
การจัดกลุ่มใน SQL ทำหน้าที่เป็นเครื่องมืออันทรงพลังสำหรับการจัดระเบียบและวิเคราะห์ข้อมูล ช่วยในการดึงข้อมูลเชิงลึกที่มีความหมายและข้อมูลสรุปจากชุดข้อมูลที่ซับซ้อน กรณีการใช้งานที่ดีที่สุดของการจัดกลุ่มคือการสรุปและทำความเข้าใจคุณลักษณะของข้อมูล ซึ่งจะช่วยให้ธุรกิจต่างๆ ในงานวิเคราะห์และรายงานได้
โดยทั่วไปแล้ว เรามีข้อกำหนดมากมายที่ต้องรวมบันทึกชุดข้อมูลด้วยข้อมูลทั่วไปเพื่อคำนวณสถิติในกลุ่ม อินสแตนซ์เหล่านี้ส่วนใหญ่สามารถสรุปเป็นสถานการณ์ทั่วไปได้ สถานการณ์เหล่านี้สามารถนำไปใช้เมื่อใดก็ตามที่มีความต้องการประเภทเดียวกันเกิดขึ้น
GROUP BY clause ใน SQL ใช้สำหรับ
- การจัดกลุ่มข้อมูลในบางคอลัมน์
- ลดกลุ่มให้เหลือแถวเดียว
- ดำเนินการรวมกลุ่มในคอลัมน์อื่นของกลุ่ม
คอลัมน์การจัดกลุ่ม = ค่าในคอลัมน์การจัดกลุ่มควรเหมือนกันสำหรับแถวทั้งหมดในกลุ่ม
คอลัมน์การรวม = โดยทั่วไปค่าในคอลัมน์การรวมจะแตกต่างกับฟังก์ชันที่ใช้ เช่น ผลรวม สูงสุด ฯลฯ
คอลัมน์การรวมไม่ควรเป็นคอลัมน์การจัดกลุ่ม
สถานการณ์ที่ 1: การจัดกลุ่มเพื่อค้นหาผลรวมของผลรวม
สมมติว่าเราต้องการคำนวณยอดขายรวมของทุกประเภทในตารางการขาย
ดังนั้นเราจะจัดกลุ่มตามหมวดหมู่และรวมยอดขายแต่ละรายการในทุกหมวดหมู่
select category,
sum(amount) as sales
from sales
group by category;
คอลัมน์การจัดกลุ่ม = หมวดหมู่
คอลัมน์การรวม = จำนวนเงิน
ฟังก์ชันการรวม = ผลรวม()
หมวดหมู่ | ขาย |
ของเล่น | 10,700 |
หนังสือ | 4,200 |
อุปกรณ์ออกกำลังกาย | 2,000 |
หยุดนิ่ง | 1,400 |
สถานการณ์ที่ 2: การจัดกลุ่มเพื่อค้นหาการนับ
สมมติว่าเราต้องการคำนวณจำนวนพนักงานในแต่ละแผนก
ในกรณีนี้เราจะจัดกลุ่มตามแผนกและคำนวณจำนวนพนักงานในทุกแผนก
select department,
count(empid) as emp_count
from employees
group by department;
คอลัมน์การจัดกลุ่ม = แผนก
คอลัมน์การรวม = empid
ฟังก์ชันการรวม = การนับ
แผนก | emp_count |
เงินทุน | 7 |
การตลาด | 12 |
เทคโนโลยี | 20 |
สถานการณ์ที่ 3: การจัดกลุ่มเพื่อค้นหาค่าเฉลี่ย
สมมติว่าเราต้องการคำนวณเงินเดือนเฉลี่ยของพนักงานในแต่ละแผนก
ในทำนองเดียวกัน เราจะจัดกลุ่มตามแผนกอีกครั้ง และคำนวณเงินเดือนเฉลี่ยของพนักงานในทุกแผนกแยกกัน
select department,
avg(salary) as avg_salary
from employees
group by department;
คอลัมน์การจัดกลุ่ม = แผนก
คอลัมน์รวม = เงินเดือน
ฟังก์ชันการรวม = เฉลี่ย
แผนก | เฉลี่ย_เงินเดือน |
---|---|
เงินทุน | 2,500 |
การตลาด | 4,700 |
เทคโนโลยี | 10,200 |
สถานการณ์ที่ 4: การจัดกลุ่มเพื่อค้นหาสูงสุด / ต่ำสุด
สมมติว่าเราต้องการคำนวณเงินเดือนสูงสุดของพนักงานในแต่ละแผนก
เราจะจัดกลุ่มแผนกและคำนวณเงินเดือนสูงสุดในทุกแผนก
select department,
max(salary) as max_salary
from employees
group by department;
คอลัมน์การจัดกลุ่ม = แผนก
คอลัมน์รวม = เงินเดือน
ฟังก์ชันการรวม = สูงสุด
แผนก | สูงสุด_เงินเดือน |
---|---|
เงินทุน | 4,000 |
การตลาด | 9,000 |
เทคโนโลยี | 12,000 |
สถานการณ์ที่ 5: การจัดกลุ่มเพื่อค้นหารายการที่ซ้ำกัน
สมมติว่าเราต้องการค้นหาชื่อลูกค้าที่ซ้ำกันหรือชื่อเดียวกันในฐานข้อมูลของเรา
เราจะจัดกลุ่มตามชื่อลูกค้าและใช้การนับเป็นฟังก์ชันการรวมกลุ่ม นอกจากนี้ เราจะใช้การมีส่วนคำสั่งเหนือฟังก์ชันการรวมเพื่อกรองเฉพาะจำนวนที่มากกว่าหนึ่งเท่านั้น
select name,
count(*) AS duplicate_count
from customers
group by name
having count(*) > 1;
คอลัมน์การจัดกลุ่ม = ชื่อ
คอลัมน์การรวม = *
ฟังก์ชันการรวม = การนับ
มี = เงื่อนไขตัวกรองที่จะใช้กับฟังก์ชันการรวม
ชื่อ | ซ้ำ_count |
เจค จุนหนิง | 2 |
แมรี่ มูน | 3 |
ปีเตอร์ปาร์คเกอร์ | 5 |
โอลิเวอร์ ควีน | 2 |
PARTITION BY clause ใน SQL ใช้สำหรับ
- การจัดกลุ่ม/การแบ่งพาร์ติชันข้อมูลในบางคอลัมน์
- แต่ละแถวจะยังคงอยู่และ ไม่ รวมกันเป็นหนึ่งเดียว
- ดำเนินการจัดอันดับและการรวมกลุ่มในคอลัมน์อื่นของกลุ่ม/พาร์ติชัน
การแบ่งคอลัมน์ = เราเลือกคอลัมน์ที่เราจัดกลุ่มข้อมูล ข้อมูลในคอลัมน์พาร์ติชันจะต้องเหมือนกันสำหรับแต่ละกลุ่ม หากไม่ได้ระบุ ตารางทั้งหมดจะถือเป็นพาร์ติชันเดียว
Ordering column = โดยแต่ละกลุ่มสร้างขึ้นตาม Partitioning Column เราจะเรียงลำดับ/จัดเรียงแถวในกลุ่ม
ฟังก์ชันการจัดอันดับ = ฟังก์ชันการจัดอันดับหรือฟังก์ชันการรวมจะถูกนำไปใช้กับแถวในพาร์ติชัน
สถานการณ์ที่ 6: การแบ่งพาร์ติชันเพื่อค้นหาสถิติสูงสุดในกลุ่ม
สมมติว่าเราต้องการคำนวณว่าหนังสือเล่มใดในแต่ละหมวดหมู่มียอดขายสูงสุด พร้อมด้วยจำนวนหนังสือที่ขายดีที่สุด
ในกรณีนี้ เราไม่สามารถใช้กลุ่มตามข้อได้ เนื่องจากการจัดกลุ่มจะลดบันทึกในทุกหมวดหมู่ให้เหลือแถวเดียว
อย่างไรก็ตาม เราต้องการรายละเอียดบันทึก เช่น ชื่อหนังสือ จำนวน ฯลฯ พร้อมด้วยหมวดหมู่เพื่อดูว่าหนังสือเล่มใดมียอดขายสูงสุดในแต่ละหมวด
select book_name, amount
row_number() over (partition by category order by amount) as sales_rank
from book_sales;
การแบ่งคอลัมน์ = หมวดหมู่
คอลัมน์การสั่งซื้อ = จำนวน
ฟังก์ชันการจัดอันดับ = row_number()
แบบสอบถามนี้แสดงแถวทั้งหมดในตาราง book_sales และแถวต่างๆ จะถูกเรียงลำดับในหนังสือทุกประเภท โดยหนังสือที่ขายดีที่สุดจะเป็นแถวที่ 1
ตอนนี้เราต้องกรองเฉพาะแถวหมายเลข 1 เพื่อให้ได้หนังสือขายดีในแต่ละหมวด
select category, book_name, amount from (
select category, book_name, amount
row_number() over (partition by category order by amount) as sales_rank
from book_sales
) as book_ranked_sales
where sales_rank = 1;
ตัวกรองด้านบนจะแสดงเฉพาะหนังสือขายดีในแต่ละหมวดหมู่ พร้อมด้วยยอดขายหนังสือขายดีแต่ละเล่ม
หมวดหมู่ | หนังสือ_ชื่อ | จำนวน |
วิทยาศาสตร์ | ข้อความที่ซ่อนอยู่ในน้ำ | 20,700 |
นิยาย | แฮร์รี่พอตเตอร์ | 50,600 |
จิตวิญญาณ | อัตชีวประวัติของโยคี | 30,800 |
การช่วยตนเอง | ภาษารัก 5 | 12,700 |
สถานการณ์ที่ 7: การแบ่งพาร์ติชันเพื่อค้นหาผลรวมสะสมในกลุ่ม
สมมติว่าเราต้องการคำนวณยอดรวมสะสม (ยอดรวมสะสม) ของการขายเมื่อมีการขาย เราต้องการยอดรวมสะสมแยกต่างหากสำหรับทุกผลิตภัณฑ์
เราจะแบ่งพาร์ติชันตาม product_id และจัดเรียงพาร์ติชันตามวันที่
select product_id, date, amount,
sum(amount) over (partition by product_id order by date desc) as running_total
from sales_data;
คอลัมน์การแบ่งพาร์ติชัน = product_id
คอลัมน์การเรียงลำดับ = วันที่
ฟังก์ชันการจัดอันดับ = sum()
รหัสผลิตภัณฑ์ | ข้อมูล | จำนวน | วิ่ง_รวม |
1 | 2023-12-25 | 3,900 | 3,900 |
1 | 2023-12-24 | 3,000 | 6,900 |
1 | 2023-12-23 | 2,700 | 9,600 |
1 | 2023-12-22 | 1,800 | 11,400 |
2 | 2023-12-25 | 2,000 | 2,000 |
2 | 2023-12-24 | 1,000 | 3,000 |
2 | 2023-12-23 | 7,00 | 3,700 |
3 | 2023-12-25 | 1,500 | 1,500 |
3 | 2023-12-24 | 4,00 | 1,900 |
สถานการณ์ที่ 8: การแบ่งพาร์ติชันเพื่อเปรียบเทียบค่าภายในกลุ่ม
สมมติว่าเราต้องการเปรียบเทียบเงินเดือนของพนักงานทุกคนกับเงินเดือนเฉลี่ยของแผนกของเขา
ดังนั้นเราจะแบ่งพนักงานตามแผนกและหาเงินเดือนเฉลี่ยของแต่ละแผนก
คุณสามารถลบค่าเฉลี่ยออกจากเงินเดือนของพนักงานแต่ละคนได้อย่างง่ายดาย เพื่อคำนวณว่าเงินเดือนของพนักงานสูงกว่าหรือต่ำกว่าค่าเฉลี่ย
select employee_id, salary, department,
avg(salary) over (partition by department) as avg_dept_sal
from employees;
คอลัมน์การแบ่งพาร์ติชัน = แผนก
คอลัมน์การสั่งซื้อ = ไม่มีการสั่งซื้อ
ฟังก์ชันการจัดอันดับ = avg()
พนักงาน_id | เงินเดือน | แผนก | avg_dept_sal |
1 | 7,200 | เงินทุน | 6,400 |
2 | 8,000 | เงินทุน | 6,400 |
3 | 4,000 | เงินทุน | 6,400 |
4 | 12,000 | เทคโนโลยี | 11,300 |
5 | 15,000 | เทคโนโลยี | 11,300 |
6 | 7,000 | เทคโนโลยี | 11,300 |
7 | 4,000 | การตลาด | 5,000 |
8 | 6,000 | การตลาด | 5,000 |
สถานการณ์ที่ 9: การแบ่งพาร์ติชันเพื่อแบ่งผลลัพธ์ออกเป็นกลุ่มเท่าๆ กัน
สมมติว่าเราต้องการแบ่งพนักงานออกเป็น 4 กลุ่มเท่าๆ กัน (หรือเกือบเท่ากัน) ตามเงินเดือนของพวกเขา
ดังนั้นเราจะได้คอลัมน์ลอจิคัลอีกคอลัมน์หนึ่งคือtile_id ซึ่งจะมีรหัสตัวเลขของพนักงานแต่ละกลุ่ม
กลุ่มจะถูกสร้างขึ้นตามเงินเดือน - กลุ่มไทล์แรกจะมีเงินเดือนสูงสุด และอื่นๆ
select employee_id, salary,
ntile(4) over (order by salary desc) as tile_id
from employees;
คอลัมน์การแบ่งพาร์ติชัน = ไม่มีพาร์ติชัน - ตารางทั้งหมดอยู่ในพาร์ติชันเดียวกัน
คอลัมน์การเรียงลำดับ = เงินเดือน
ฟังก์ชันการจัดอันดับ = ntile()
พนักงาน_id | เงินเดือน | tile_id |
4 | 12,500 | 1 |
11 | 11,000 | 1 |
3 | 10,500 | 1 |
1 | 9,000 | 2 |
8 | 8,500 | 2 |
6 | 8,000 | 2 |
12 | 7,000 | 3 |
5 | 7,000 | 3 |
9 | 6,500 | 3 |
10 | 6,000 | 4 |
2 | 5,000 | 4 |
7 | 4,000 | 4 |
สถานการณ์ที่ 10: การแบ่งพาร์ติชันเพื่อระบุเกาะหรือช่องว่างในข้อมูล
สมมติว่าเรามีคอลัมน์ product_id ตามลำดับ และเราต้องการระบุช่องว่างในคอลัมน์นี้
ดังนั้นเราจะได้คอลัมน์ตรรกะอีกคอลัมน์หนึ่งคือ island_id ซึ่งจะมีตัวเลขเดียวกันหาก product_id เป็นแบบเรียงลำดับ เมื่อมีการระบุตัวแบ่งใน product_id แล้ว island_id จะเพิ่มขึ้น
select product_id,
row_number() over (order by product_id) as row_num,
product_id - row_number() over (order by product_id) as island_id,
from products;
คอลัมน์การแบ่งพาร์ติชัน = ไม่มีพาร์ติชัน - ตารางทั้งหมดอยู่ในพาร์ติชันเดียวกัน
คอลัมน์การสั่งซื้อ = product_id
ฟังก์ชันการจัดอันดับ = row_number()
รหัสผลิตภัณฑ์ | row_num | เกาะ_id |
1 | 1 | 0 |
2 | 2 | 0 |
4 | 3 | 1 |
5 | 4 | 1 |
6 | 5 | 1 |
8 | 6 | 2 |
9 | 7 | 2 |
Group By และ Partition By ใช้เพื่อแก้ไขปัญหาต่างๆ เช่น:
ข้อมูลโดยสรุป: การจัดกลุ่มช่วยให้คุณสามารถรวบรวมข้อมูลและสรุปข้อมูลในทุกกลุ่ม
การวิเคราะห์รูปแบบ: ช่วยในการระบุรูปแบบหรือแนวโน้มภายในชุดย่อยของข้อมูล โดยให้ข้อมูลเชิงลึกในด้านต่างๆ ของชุดข้อมูล
การวิเคราะห์ทางสถิติ: เปิดใช้งานการคำนวณการวัดทางสถิติ เช่น ค่าเฉลี่ย จำนวนนับ สูงสุด ต่ำสุด และฟังก์ชันรวมอื่นๆ ภายในกลุ่ม
การล้างข้อมูล: ช่วยระบุรายการที่ซ้ำกัน ความไม่สอดคล้องกัน หรือความผิดปกติภายในกลุ่ม ทำให้การล้างข้อมูลและการปรับปรุงคุณภาพสามารถจัดการได้มากขึ้น
การวิเคราะห์กลุ่ม: มีประโยชน์ในการวิเคราะห์ตามรุ่น การติดตามและการเปรียบเทียบกลุ่มของเอนทิตีในช่วงเวลาหนึ่ง ฯลฯ
Hanu ทำงาน บล็อก HelperCodes ซึ่งส่วนใหญ่เกี่ยวข้องกับ แผ่นโกง SQL. ฉันเป็นนักพัฒนาซอฟต์แวร์เต็มรูปแบบและสนใจที่จะสร้างเนื้อหาที่นำมาใช้ซ้ำได้
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- PlatoData.Network Vertical Generative Ai เพิ่มพลังให้กับตัวเอง เข้าถึงได้ที่นี่.
- เพลโตไอสตรีม. Web3 อัจฉริยะ ขยายความรู้ เข้าถึงได้ที่นี่.
- เพลโตESG. คาร์บอน, คลีนเทค, พลังงาน, สิ่งแวดล้อม แสงอาทิตย์, การจัดการของเสีย. เข้าถึงได้ที่นี่.
- เพลโตสุขภาพ เทคโนโลยีชีวภาพและข่าวกรองการทดลองทางคลินิก เข้าถึงได้ที่นี่.
- ที่มา: https://www.kdnuggets.com/sql-group-by-and-partition-by-scenarios-when-and-how-to-combine-data-in-data-science?utm_source=rss&utm_medium=rss&utm_campaign=sql-group-by-and-partition-by-scenarios-when-and-how-to-combine-data-in-data-science
- :มี
- :เป็น
- :ไม่
- :ที่ไหน
- $ ขึ้น
- 1
- 10
- 11
- 13
- 7
- 8
- 9
- a
- ข้างบน
- อีกครั้ง
- สรุป
- การรวมตัว
- ทั้งหมด
- ช่วยให้
- ตาม
- am
- จำนวน
- an
- การวิเคราะห์
- วิเคราะห์
- วิเคราะห์
- และ
- อื่น
- ประยุกต์
- เป็น
- AS
- ด้าน
- สินทรัพย์
- เฉลี่ย
- ตาม
- BE
- เพราะ
- ด้านล่าง
- ที่ดีที่สุด
- หนังสือ
- ร้านหนังสือเกาหลี
- ทำลาย
- ธุรกิจ
- by
- คำนวณ
- การคำนวณ
- CAN
- ไม่ได้
- กรณี
- หมวดหมู่
- ลักษณะ
- คอลัมน์
- คอลัมน์
- รวมกัน
- มา
- ร่วมกัน
- เปรียบเทียบ
- เปรียบเทียบ
- สมบูรณ์
- ซับซ้อน
- สภาพ
- ถือว่า
- ที่สร้างขึ้น
- การสร้าง
- ลูกค้า
- ลูกค้า
- ข้อมูล
- วิทยาศาสตร์ข้อมูล
- ฐานข้อมูล
- ฐานข้อมูล
- ชุดข้อมูล
- วันที่
- ข้อเสนอ
- แผนก
- หน่วยงาน
- ได้มา
- รายละเอียด
- ผู้พัฒนา
- ต่าง
- แบ่ง
- ที่ซ้ำกัน
- แต่ละ
- อย่างง่ายดาย
- ที่มีประสิทธิภาพ
- ลูกจ้าง
- พนักงาน
- ช่วยให้
- หน่วยงาน
- เท่ากัน
- จำเป็น
- ฯลฯ
- ทุกๆ
- การสกัด
- กรอง
- หา
- ชื่อจริง
- สำหรับ
- ราคาเริ่มต้นที่
- เต็ม
- กองเต็ม
- ฟังก์ชัน
- ฟังก์ชั่น
- ต่อไป
- ช่องว่าง
- โดยทั่วไป
- ได้รับ
- ให้
- จะช่วยให้
- มากขึ้น
- บัญชีกลุ่ม
- กลุ่ม
- มี
- มี
- การช่วยเหลือ
- จะช่วยให้
- ซ่อนเร้น
- สูงกว่า
- ที่สูงที่สุด
- ของเขา
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- HTTPS
- i
- ID
- ระบุ
- แยกแยะ
- ระบุ
- if
- การปรับปรุง
- in
- ไม่สอดคล้องกัน
- เป็นรายบุคคล
- ข้อมูล
- ข้อมูลเชิงลึก
- อินสแตนซ์
- การมีปฏิสัมพันธ์
- สนใจ
- เข้าไป
- หมู่เกาะ
- IT
- KD นักเก็ต
- ชนิด
- ภาษา
- กดไลก์
- ตรรกะ
- Lot
- ความรัก
- ทำ
- ส่วนใหญ่
- การทำ
- การจัดการ
- การจัดการกับ
- ลักษณะ
- หลาย
- แม็กซ์
- สูงสุด
- มีความหมาย
- มาตรการ
- ข้อความ
- ข้อมูลเพิ่มเติม
- มากที่สุด
- ต้อง
- ชื่อ
- ชื่อ
- เกือบทั้งหมด
- จำเป็นต้อง
- ไม่
- จำนวน
- จำนวน 1
- of
- on
- ONE
- เพียง
- การดำเนินการ
- or
- ใบสั่ง
- การจัดระเบียบ
- อื่นๆ
- ของเรา
- เกิน
- รูปแบบ
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- ที่มีประสิทธิภาพ
- ปัญหาที่เกิดขึ้น
- ผลิตภัณฑ์
- ผลิตภัณฑ์
- การเขียนโปรแกรม
- การให้
- คุณภาพ
- คำสั่ง
- อันดับ
- ระเบียน
- บันทึก
- ลด
- การรายงาน
- ความต้องการ
- ความต้องการ
- ผลสอบ
- เก็บไว้
- นำมาใช้ใหม่
- แถว
- วิ่ง
- ทำงาน
- s
- เงินเดือน
- เงินเดือน
- การขาย
- ขาย
- เดียวกัน
- กล่าว
- สถานการณ์
- วิทยาศาสตร์
- เห็น
- เลือก
- แยก
- ให้บริการอาหาร
- น่า
- คล้ายคลึงกัน
- เดียว
- So
- ขาย
- แก้
- บาง
- ที่ระบุไว้
- SQL
- กอง
- ทางสถิติ
- สถิติ
- โครงสร้าง
- อย่างเช่น
- รวม
- สรุป
- ตาราง
- งาน
- กว่า
- ที่
- พื้นที่
- ของพวกเขา
- พวกเขา
- แล้วก็
- ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน
- พวกเขา
- นี้
- เหล่านั้น
- ดังนั้น
- เวลา
- ไปยัง
- เครื่องมือ
- ด้านบน
- รวม
- การติดตาม
- แนวโน้ม
- เข้าใจ
- us
- ใช้
- ใช้กรณี
- มือสอง
- ความคุ้มค่า
- ความคุ้มค่า
- ต่างๆ
- มาก
- ต้องการ
- we
- เมื่อ
- เมื่อไรก็ตาม
- ที่
- ทำไม
- จะ
- กับ
- ภายใน
- เธอ
- ลมทะเล