จาก > สถานที่ > “จัดกลุ่มตาม” > มี > เลือก > แตกต่าง > เรียงลำดับตาม > จำกัด
การทำงานของ 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” ใช้เพื่อใช้โอเปอเรเตอร์รวมใดๆ กับข้อมูลรวม บทความนี้ใช้การจัดกลุ่มตามข้อที่มีฟังก์ชันนับ การรวม และการเลือกและการจัดกลุ่มของหลายคอลัมน์ ฉันแน่ใจว่าบทช่วยสอนนี้จะเป็นแนวทางที่ดีที่สุดสำหรับผู้อ่าน