มีคนส่งมาให้ผมแบบสอบถาม SQL ที่ข้อประกอบด้วยคำสั่ง:GROUP BY
GROUP BY 1
นี่ต้องเป็นตัวพิมพ์ผิดใช่มั้ย ไม่มีคอลัมน์ที่ให้นามแฝง 1. สิ่งนี้หมายความว่าอย่างไร ฉันคิดถูกหรือเปล่าว่านี่ต้องเป็นตัวพิมพ์ผิดใช่ไหม
มีคนส่งมาให้ผมแบบสอบถาม SQL ที่ข้อประกอบด้วยคำสั่ง:GROUP BY
GROUP BY 1
นี่ต้องเป็นตัวพิมพ์ผิดใช่มั้ย ไม่มีคอลัมน์ที่ให้นามแฝง 1. สิ่งนี้หมายความว่าอย่างไร ฉันคิดถูกหรือเปล่าว่านี่ต้องเป็นตัวพิมพ์ผิดใช่ไหม
คำตอบ:
มันหมายถึงการจัดกลุ่มตามคอลัมน์แรกโดยไม่คำนึงถึงสิ่งที่เรียกว่า ORDER BY
คุณสามารถทำเช่นเดียวกันกับ
SELECT account_id, open_emp_id
^^^^ ^^^^
1 2
FROM account
GROUP BY 1;
ในแบบสอบถามดังกล่าวGROUP BY 1
หมายถึงซึ่งเป็นfirst column in select statement
account_id
ORDER BY
นอกจากนี้คุณยังสามารถระบุใน
หมายเหตุ: หมายเลขใน ORDER BY และ GROUP BY มักเริ่มต้นด้วย 1 ไม่ใช่ด้วย 0
นอกเหนือจากการจัดกลุ่มตามชื่อฟิลด์คุณอาจจัดกลุ่มตามลำดับหรือตำแหน่งของฟิลด์ภายในตาราง 1 สอดคล้องกับฟิลด์แรก (โดยไม่คำนึงถึงชื่อ) 2 คือฟิลด์ที่สองเป็นต้น
โดยทั่วไปจะไม่แนะนำหากคุณจัดกลุ่มกับบางอย่างที่เฉพาะเจาะจงเนื่องจากโครงสร้างตาราง / มุมมองอาจเปลี่ยนแปลง นอกจากนี้อาจเป็นเรื่องยากที่จะเข้าใจอย่างรวดเร็วว่าการสืบค้น SQL ของคุณกำลังทำอะไรหากคุณยังไม่ได้จดจำเขตข้อมูลตาราง
หากคุณส่งคืนชุดที่ไม่ซ้ำกันหรือทำการค้นหาชั่วคราวอย่างรวดเร็วนี่เป็นไวยากรณ์ชวเลขที่ดีเพื่อลดการพิมพ์ หากคุณวางแผนที่จะเรียกใช้แบบสอบถามอีกครั้งในบางจุดฉันขอแนะนำให้แทนที่สิ่งเหล่านั้นเพื่อหลีกเลี่ยงความสับสนในอนาคตและภาวะแทรกซ้อนที่ไม่คาดคิด (เนื่องจากการเปลี่ยนแปลงรูปแบบ)
มันจะจัดกลุ่มตามสนามแรกในส่วนคำสั่งที่เลือก
นั่นหมายความว่ากลุ่ม sql ตามคอลัมน์ที่ 1 ในส่วนคำสั่งที่คุณเลือกเราใช้มันGROUP BY 1
ร่วมกับORDER BY 1
คุณนอกจากนี้คุณยังสามารถใช้เช่นนี้GROUP BY 1,2,3..
แน่นอนว่ามันสะดวกสำหรับเรา แต่คุณต้องใส่ใจกับเงื่อนไขนั้นผลลัพธ์อาจไม่ใช่สิ่งที่คุณต้องการ ต้องการถ้ามีใครบางคนได้ปรับเปลี่ยนคอลัมน์ที่คุณเลือกและมันไม่ได้มองเห็น
มันจะจัดกลุ่มตามตำแหน่งคอลัมน์ที่คุณใส่หลังจากกลุ่มตามข้อ
ตัวอย่างเช่นถ้าคุณใช้ ' SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
' SALESMAN_NAME
ก็จะจัดกลุ่มตาม
หนึ่งความเสี่ยงในการทำเช่นนั้นคือถ้าคุณเรียกใช้ ' Select *
' และด้วยเหตุผลบางอย่างที่คุณสร้างตารางด้วยคอลัมน์ในลำดับที่แตกต่างกันมันจะให้ผลลัพธ์ที่แตกต่างจากที่คุณคาดไว้