เป็นไปได้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
เพียงหนึ่งคอลัมน์แล้วSUM
s ค่าทั้งหมดของแต่ละที่แตกต่างกัน (แตกต่างกัน) คอลัมน์ค่า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 ;