ฟังก์ชั่น MySQL และหน้าต่าง


30

ดูเหมือนว่าMySQLไม่รองรับฟังก์ชั่นหน้าต่าง
เช่นง่าย ๆ : COUNT(*) OVER() AS cntไม่ทำงาน
สิ่งที่ฉันไม่แน่ใจคือถ้าสิ่งนี้นำไปใช้กับรุ่นเชิงพาณิชย์เช่นกัน (ฉันถือว่ารุ่นชุมชนเป็นชุดย่อยที่ จำกัด )
ถ้าไม่วิธีการหนึ่งที่จะแก้ไขคุณสมบัติที่ขาดหายไปนี้ได้อย่างไร


3
เซิร์ฟเวอร์ชุมชนรุ่น MySQL ไม่ได้เป็นส่วนย่อย จำกัด ในแง่ที่มีความหมายใด ๆ ความแตกต่างอยู่ในส่วนเสริมและปลั๊กอินที่ไม่มีผลต่อฟังก์ชันการทำงานหลัก
Michael - sqlbot

ดูวิธีแก้ปัญหานี้ได้ที่นี่และที่นี่
StuartLC

จริงๆแล้ว MySQL9 รองรับ ฉันใช้แพนด้าแทนการดูดแบบไหน
Andrew Scott Evans

1
MySQL 8 รองรับฟังก์ชั่นหน้าต่าง สำหรับการอ้างอิง: dev.mysql.com/doc/refman/8.0/en/window-functions.html
gvgvgvijayan

MySQL รองรับฟังก์ชั่นหน้าต่างตั้งแต่รุ่น 8.0 ลิงค์นี้อาจช่วยได้
ฮามิด Mohayeji

คำตอบ:


36

MySQL ไม่รองรับฟังก์ชั่น Window (*) นอกจากนี้สิ่งที่เราเรียกว่า "ฟังก์ชั่นหน้าต่างคนจน" ในรูปแบบของgroup_concat ()

มีลูกเล่นมากมายที่ใช้GROUP_CONCATเพื่อเลียนแบบฟังก์ชั่นของหน้าต่าง พวกเขาจะไม่สวย (syntactically) และบางครั้งก็ จำกัด เกินไป ฉันเขียนไม่กี่ ดูโพสต์บล็อกของฉันบ่นเกี่ยวกับการหายตัวไปของฟังก์ชั่นหน้าต่างGROUP_CONCATและเชื่อมโยงไปยังโซลูชั่นต่างๆที่อยู่บนพื้นฐานของ

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

สิ่งที่คุณควรทราบเกี่ยวกับGROUP_CONCAT():

  • สามารถใช้ DISTINCT
  • สามารถใช้ ORDER BY ... ASC/DESC
  • สามารถตั้งค่า SEPARATOR
  • ฟังก์ชั่นการรวมใด ๆ - มันจะทิ้งค่า NULL; เทคนิคมากมายที่

(*) เพิ่มการรองรับฟังก์ชั่น Window ใน MySQL 8


MySQL รองรับฟังก์ชั่นหน้าต่างตั้งแต่เวอร์ชั่น 8
สูงสุด

GROUP_CONCAT ไม่ใช่ฟังก์ชั่นหน้าต่างมันเป็นฟังก์ชั่นชุดสั่งซื้อ
SQLRaptor

1
@SQLRaptor ไม่มีใครอ้างว่าเป็น
ypercubeᵀᴹ

11

จริงๆมันควรจะตั้งข้อสังเกตว่า MariaDB 10.2 (ปล่อยตัวในปี 2017 พฤษภาคม) มีฟังก์ชั่นหน้าต่าง แน่นอนว่าเป็นหนทางเดียวที่จะติดตามหากคุณต้องการฟังก์ชั่น MySQL และหน้าต่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.