เป็นไปได้GROUP BYมากกว่าหนึ่งคอลัมน์ในSELECTแบบสอบถามMySQL หรือไม่ ตัวอย่างเช่น:
GROUP BY fV.tier_id AND 'f.form_template_id'
เป็นไปได้GROUP BYมากกว่าหนึ่งคอลัมน์ในSELECTแบบสอบถามMySQL หรือไม่ ตัวอย่างเช่น:
GROUP BY fV.tier_id AND 'f.form_template_id'
คำตอบ:
GROUP BY col1, col2, col3
ใช่คุณสามารถจัดกลุ่มได้หลายคอลัมน์ ตัวอย่างเช่น,
SELECT * FROM table
GROUP BY col1, col2
ผลลัพธ์จะถูกจัดกลุ่มตาม col1 ก่อนแล้วตามด้วย col2 ใน MySQL การตั้งค่าคอลัมน์จะเริ่มจากซ้ายไปขวา
GROUP BY col1+col2เช่นcol1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2และวิ่งGROUP BY col1,col2จะกลับมา1,1|1,3|2,2เมื่อเทียบกับ1,1|2,2ที่แนะนำ ในขณะที่GROUP BY col2, col1จะเปลี่ยนลำดับของ col2 ที่กลับมา 1,1|2,2|1,3 การสาธิต: sqlfiddle.com/#!9/d5f69/1โปรดทราบว่า id ของแถว: 2 จะถูกส่งคืนทั้งสองกรณี2,2แม้ว่าจะเป็นการกลับคอลัมน์
GROUP BY) และหากในคอลัมน์แรกที่กำหนดมีผลลัพธ์เท่ากันจะมีเฉพาะผลลัพธ์ที่เท่ากันเรียงตามคอลัมน์ที่สองที่กำหนดไว้
SUM GROUP BYหากGROUP BYเพียงหนึ่งคอลัมน์แล้วSUMs ค่าทั้งหมดของแต่ละที่แตกต่างกัน (แตกต่างกัน) คอลัมน์ค่าsqlfiddle.com/#!9/1cbde2/2 ถ้าGROUP BYสองคอลัมน์ จากนั้น mysql ในตอนแรกจะตรวจสอบว่าค่าในคอลัมน์แรกมีค่าต่างกันในคอลัมน์ที่สองหรือไม่ ถ้าใช่แล้ว mysql SUMแต่ละค่าที่แตกต่างกันของคอลัมน์ที่สองsqlfiddle.com/#!9/1cbde2/1
ใช่ แต่การจัดกลุ่มตามสองคอลัมน์เพิ่มเติมหมายความว่าอย่างไร มันก็เหมือนกับการจัดกลุ่มของแต่ละคู่ที่ไม่ซ้ำกันต่อแถว ลำดับที่คุณแสดงรายการคอลัมน์จะเปลี่ยนวิธีเรียงลำดับแถว
ในตัวอย่างของคุณคุณจะเขียน
GROUP BY fV.tier_id, f.form_template_id
ในขณะเดียวกันรหัส
GROUP BY f.form_template_id, fV.tier_id
จะให้ผลลัพธ์ที่คล้ายกัน แต่จัดเรียงแตกต่างกัน
group by fV.tier_id, f.form_template_id
ในการใช้ตัวอย่างง่ายๆฉันมีตัวนับที่จำเป็นต้องสรุปที่อยู่ IP ที่ไม่ซ้ำกันต่อการเยี่ยมชมหน้าหนึ่งในเว็บไซต์ ซึ่งโดยทั่วไปแล้วจะจัดกลุ่มตามชื่อไฟล์แล้วโดย IP ฉันแก้ไขมันด้วยการรวมกันของ DISTINCT และ GROUP BY
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
หากคุณต้องการกลุ่ม (ฉันจำเป็นต้องใช้สิ่งนี้) สองคอลัมน์ในเวลาเดียวกันฉันเพิ่งเห็นจุดนี้:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2. ผลลัพธ์มักจะดูเหมือนกับคำตอบนี้ แต่การดำเนินการภายในแตกต่างกันมาก
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2มีประสิทธิภาพกว่า มันจะให้ผลที่ไม่ถูกต้องกับข้อมูลบางอย่าง พูดว่าcol1, col2มีค่า: ('a_b', 'c')ในแถวหนึ่งและ('a', 'b_c')อีกแถว คำตอบที่ผิดนี้โดย GROUP BY CONCAT จะรวมสองแถวในหนึ่งเดียว คำตอบที่ถูกต้องจะไม่
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;