Postgresql จัดกลุ่มโดย

Postgresql Cad Klum Doy



Postgresql group by clause เป็นคุณสมบัติที่ใช้ในการรวม / รวมแถวเหล่านั้นในตารางที่มีข้อมูลเดียวกัน ประโยคนี้ส่วนใหญ่ใช้เพื่อลบข้อมูลที่ซ้ำกันและเพื่อรักษาการทำงานพร้อมกัน เมื่อใดก็ตามที่เราต้องการคำนวณผลรวมหรือผลรวมอื่น ๆ เช่น AVG ฯลฯ จะใช้กลุ่มนี้ตามอนุประโยคเสมอ เนื่องจากมีอนุประโยคมากมายที่ใช้ใน PostgreSQL แต่มีลำดับชั้นระหว่างแต่ละข้อ

จาก > สถานที่ > “จัดกลุ่มตาม” > มี > เลือก > แตกต่าง > เรียงลำดับตาม > จำกัด

การทำงานของ PostgreSQL อยู่ภายใต้ “where” และ “Having” clause







ไวยากรณ์



เลือกคอลัมน์

จากดัมมี่เทเบิล

ที่ไหน [เงื่อนไข ]

จัดกลุ่มตามคอลัมน์แรก คอลัมน์ที่สอง..

ORDER BY คอลัมน์แรก, คอลัมน์ที่สอง.. ;

ตัวอย่างที่ 1



เพื่อให้เข้าใจแนวคิดของกลุ่มตามหน้าที่ เราใช้ตัวอย่างที่นี่ ในตารางผู้โดยสารคุณจะเห็นว่านามสกุลเหมือนกันสำหรับบางคน แต่ละชื่อที่คล้ายกับชื่ออื่นจะรวมกันเป็นกลุ่ม และการชำระเงินของพวกเขาจะถูกรวมเข้ากับชื่อเดียวกันแต่ละชื่อ นี่คือรายละเอียดในตัวอย่างด้านล่าง





>> เลือก lname, SUM (การชำระเงิน) จากผู้โดยสาร GROUP BY lname;

นามสกุลของผู้โดยสารถูกเลือกโดยใช้ฟังก์ชันในตัว 'SUM' ซึ่งรับคอลัมน์ 'การชำระเงิน' และเพิ่มการชำระเงินสำหรับผู้ที่มีชื่อเดียวกัน ตัวอย่างเช่น เพิ่มเงินเดือนของ 'Javed' และ 'saad' สำหรับ 'มาลิก' และ 'ชามส์' จะกล่าวถึงแยกกัน



ในทำนองเดียวกันให้พิจารณาตาราง 'โรงพยาบาล' เราต้องการจัดกลุ่มเมืองตามยุคสมัย ในตัวอย่างนี้ เมืองหนึ่งมีอยู่มากกว่าหนึ่งครั้งในหนึ่งคอลัมน์ แต่ละเมืองจะถูกจัดกลุ่มด้วยชื่อเมืองเดียวกัน อายุของแต่ละกลุ่มของเมืองจะถูกรวมเข้าเป็นแถวเดียว

โรงพยาบาล:

>> เลือกเมือง SUM (อายุ) จากโรงพยาบาล GROUP BY เมือง;

ตัวอย่างที่ 2

หรือหากเราเลือกนามสกุลที่มีรหัสจากผู้โดยสารในตาราง ผลลัพธ์ที่ได้จะเป็นตารางอื่น เพราะเมื่อเราจับกลุ่มทั้งสองคอลัมน์เข้าด้วยกัน ก็จะแสดงชื่อผู้โดยสารแต่ละคน เนื่องจากรหัสประจำตัวของผู้โดยสารทุกคน แม้จะมีชื่อนามสกุลเดียวกันก็แตกต่างกัน ผลรวมจะคำนวณในคอลัมน์แยกต่างหาก แต่การชำระเงินของผู้โดยสารแต่ละคนจะแสดงไว้ข้างหน้าชื่อของเขา เนื่องจากไม่ได้จัดกลุ่มของ lname ที่นี่

นี่คือตัวอย่างของกลุ่มตามข้อที่มีหลายคอลัมน์ เนื่องจากเมื่อเลือกหลายคอลัมน์สำหรับการจัดกลุ่ม ค่าผลลัพธ์จะเปลี่ยนไปเมื่อเปรียบเทียบกับกลุ่มโดยตารางเดียว

>> เลือก id, lname, SUM (การชำระเงิน) จากผู้โดยสาร GROUP BY id, lname;

จากเอาต์พุต คุณจะสังเกตเห็นสิ่งหนึ่งที่ประการแรก ชื่อทั้งหมดที่ไม่ธรรมดาจะแสดงขึ้น จากนั้นชื่อที่เหมือนกันจะถูกกล่าวถึงในตาราง

ตัวอย่างที่ 3

ตัวอย่างนี้มีเงื่อนไขการรวมและจัดกลุ่มตามข้อ เนื่องจากมีการใช้ 'join' หมายความว่าเราใช้สองตารางที่นี่ หนึ่งคือ 'รายการ' และอีกรายการคือ 'คำสั่งซื้อ'

รายการ:

คำสั่งซื้อ:

เราใช้วิธีการต่อ (ใช้เพื่อรวมสองสตริง) เพื่อรวมค่าของสองคอลัมน์ของตาราง 'รายการ' ด้วย ',' และตั้งชื่อคอลัมน์โดยรวมว่า 'คำอธิบาย' เป็นทางเลือก; คุณอาจแยกจากกัน ในแบบสอบถามนี้ คีย์เวิร์ด “USING” จะระบุคอลัมน์เฉพาะเจาะจงจากตารางอื่น ที่อยู่จากตารางรายการตรงกับคอลัมน์ที่อยู่ของตาราง 'คำสั่งซื้อ' สิ่งนี้ทำได้โดยการรวมระหว่างสองตาราง เช่นเดียวกับตัวอย่างก่อนหน้านี้ ทั้งสองคอลัมน์จะถูกเลือกโดย GROUP BY clause

>> เลือกชื่อ || ‘,’ || หมวดหมู่เป็นคำอธิบาย, ที่อยู่จากรายการภายในเข้าร่วมคำสั่งซื้อโดยใช้ (ที่อยู่) จัดกลุ่มตามที่อยู่, คำอธิบาย;

คุณสามารถสังเกตว่า 5 แถวจะถูกเลือกโดยมีที่อยู่ของรายการที่ตรงกับที่อยู่ของคำสั่งซื้อ จากนั้นคอลัมน์คำอธิบายจะถูกสร้างขึ้นโดยสอดคล้องกับคอลัมน์ที่อยู่

ในทำนองเดียวกัน มีอีกตัวอย่างหนึ่งของการต่อเข้ากับตัวประกอบของอายุในตารางสองตาราง คนหนึ่งคือ 'ผู้โดยสาร' และอีกคนคือ 'คนงาน' การเชื่อมข้อมูลอยู่ระหว่างชื่อและนามสกุล ทั้งสองชื่อนี้คั่นด้วยช่องว่างระหว่างสองชื่อ เราได้นำโต๊ะทำงานส่วนหนึ่งมาไว้ที่นี่

คนงาน:

แบบสอบถามจะทำงานเพื่อให้จุดที่ fname ของผู้ปฏิบัติงานตรงกับผู้โดยสาร อายุจากผู้โดยสาร แสดงในคอลัมน์อายุ

>> เลือก fname || ‘ ‘ || Passenger.lname เป็นชื่อเต็ม, Passenger.age จาก Passenger INNER เข้าร่วม Worker โดยใช้ (fname) จัดกลุ่มตามชื่อเต็ม, Passenger.age เรียงลำดับตาม Passenger.age;

หนึ่งแถวถูกสร้างขึ้น full_name ถูกสร้างขึ้นโดยการรวมสองคอลัมน์ด้วยช่องว่าง และเลือกที่อยู่โดยที่ fname ของผู้โดยสารตรงกับ fname ของผู้ปฏิบัติงาน

ตัวอย่างที่ 4

ตัวอย่างนี้เกี่ยวข้องกับการใช้ฟังก์ชัน count () เพื่อนับรหัสของตาราง 'รายการ' นี่คือการจัดกลุ่มอีกครั้งตามรหัสของตาราง

>> เลือก id, COUNT (id) จากรายการ GROUP BY id;

แถวในคอลัมน์ id ถูกแบ่งออกเป็นกลุ่ม แต่ละกลุ่มจะถูกนับในคอลัมน์ว่าปรากฏในคอลัมน์กี่ครั้ง ในตารางผลลัพธ์ คอลัมน์ใหม่ที่มีชื่อ 'จำนวน' จะถูกสร้างขึ้น และค่าของการนับจะถูกเขียนไว้ข้างหน้าแต่ละกลุ่มที่นี่

pgAdmin ของคุณ

ตอนนี้เราได้ใช้ตัวอย่างบางส่วนในด้านแดชบอร์ดของ PostgreSQL ตัวอย่างเหล่านี้แตกต่างกันในบางส่วนเนื่องจากสร้างแถวผลรวมย่อยจากคอลัมน์เดิม เมื่อมีรายการใดรายการหนึ่งแตกต่างจากรายการอื่น ดังนั้นค่าจะถูกส่งกลับเป็น NULL

พิจารณาตัวอย่างแรก ที่นี่ เราได้สร้างชื่อคอลัมน์ “ทั้งหมด” ที่รวมสองคอลัมน์เข้าด้วยกัน ที่อยู่และหมวดหมู่ คอลัมน์ 'ทั้งหมด' จะนับค่าในทั้งสองคอลัมน์รวมกัน คอลัมน์ที่อยู่จัดกลุ่มเป็น 'เพิ่ม' และคอลัมน์หมวดหมู่จัดกลุ่มแยกกันเป็น 'แมว' เนื่องจากชื่อคอลัมน์ของทั้งสองตารางที่ใช้สามารถจับคู่กันได้ ดังนั้นแต่ละคอลัมน์ของตารางที่เกี่ยวข้องจึงเข้าถึงได้โดยวัตถุเฉพาะ

เงื่อนไขที่ใช้กับคำสั่งขึ้นอยู่กับ id และหมายเลขคำสั่ง โดยที่รหัสและหมายเลขคำสั่งซื้อเหล่านี้เหมือนกัน ข้อมูลจะถูกดึงออกมา ในทำนองเดียวกัน มีการเพิ่มเงื่อนไขเพิ่มเติมสำหรับชื่อด้วย

>> เลือก o.address, หมวดหมู่, จำนวน (*) AS “ALL”, GROUPING(o.address) AS “add” , GROUPING (category ) AS “cat” จากรายการ I, คำสั่ง o โดยที่ i.order_no = o order_id AND i.address= 'Lahore' จัดกลุ่มตาม CUBE (o.address, หมวดหมู่) ORDER BY 1, 2;

สำหรับเมืองละฮอร์ เลือกหนึ่งหมวดหมู่ มีความเป็นไปได้ 4 ประการ บางครั้งของเล่นมีอยู่แต่ไม่มีที่อยู่ และในทางกลับกัน. แต่มีช่วงเวลาที่ทั้งหมวดหมู่และที่อยู่มีอยู่

ทีนี้ถ้าเราเปลี่ยนเงื่อนไขของชื่อจากตารางแล้วสลับกับตารางอื่น “Items.address” ถูกแทนที่ด้วย “order.address” ผลลัพธ์ที่ได้จะแตกต่างออกไป

บทสรุป

ส่วนคำสั่ง “Postgresql group by” ใช้เพื่อใช้โอเปอเรเตอร์รวมใดๆ กับข้อมูลรวม บทความนี้ใช้การจัดกลุ่มตามข้อที่มีฟังก์ชันนับ การรวม และการเลือกและการจัดกลุ่มของหลายคอลัมน์ ฉันแน่ใจว่าบทช่วยสอนนี้จะเป็นแนวทางที่ดีที่สุดสำหรับผู้อ่าน