MySQL นับการจับคู่บันทึกด้วย COUNT

Mysql Count Matching Records With Count



ความซ้ำซ้อนของข้อมูลเกิดขึ้นได้จากหลายสาเหตุ หน้าที่ที่ซับซ้อนหลายอย่างที่คุณควรรับมือขณะทำงานกับระบบฐานข้อมูลกำลังพยายามค้นหาค่าที่ซ้ำกัน เพื่อจุดประสงค์นี้ เราจะใช้วิธีการรวม COUNT() เมธอด COUNT() จะคืนค่าผลรวมของแถวที่อยู่ในตารางเฉพาะ ฟังก์ชัน COUNT() อนุญาตให้คุณรวมแถวทั้งหมดหรือเฉพาะแถวที่ตรงกับเงื่อนไขที่กำหนดไว้ ในคู่มือนี้ คุณจะได้เรียนรู้วิธีระบุค่าที่ซ้ำกันสำหรับคอลัมน์ MySQL หนึ่งคอลัมน์ขึ้นไปโดยใช้ COUNT() COUNT() วิธีการมีสามประเภทต่อไปนี้:

  • นับ(*)
  • COUNT(นิพจน์)
  • COUNT(นิพจน์ DISTINCT)

ตรวจสอบว่าคุณได้ติดตั้ง MySQL ไว้ในระบบแล้ว เปิดเชลล์ไคลเอ็นต์บรรทัดคำสั่งของ MySQL และป้อนรหัสผ่านเพื่อดำเนินการต่อ เราจะดูตัวอย่างการนับค่าที่ตรงกันโดยใช้เมธอด COUNT()









เรามีตาราง 'สังคม' ใน 'ข้อมูล' ของสคีมา มาตรวจสอบบันทึกโดยใช้แบบสอบถามต่อไปนี้



>> เลือก * จาก ข้อมูล .ทางสังคม;





จำนวน MySQL(*)

วิธี COUNT(*) ใช้เพื่อนับจำนวนแถวที่อยู่ในตารางหรือนับจำนวนแถวตามเงื่อนไขที่กำหนด ในการตรวจสอบจำนวนแถวทั้งหมดในตาราง 'โซเชียล' ให้ลองใช้แบบสอบถามด้านล่าง เรามีทั้งหมด 15 แถวในตารางตามผลลัพธ์

>> เลือก นับ (*) จาก ข้อมูล .ทางสังคม;



เหลือบของวิธีการ COUNT(*) ในขณะที่กำหนดเงื่อนไขบางอย่าง เราต้องดึงจำนวนแถวที่ชื่อผู้ใช้เหมือนกับ 'Mustafa' คุณจะเห็นว่าเรามีเพียง 4 ระเบียนสำหรับชื่อนี้โดยเฉพาะ

>> เลือก นับ (*) จาก ข้อมูล .ทางสังคม ที่ไหน ผู้ใช้ ='มุสตาฟา';

ในการดึงผลรวมของแถวที่เว็บไซต์ของผู้ใช้คือ 'Instagram' ให้ลองใช้คำค้นหาด้านล่าง ตาราง 'โซเชียล' มีเพียง 4 ระเบียนสำหรับเว็บไซต์ 'Instagram'

>> เลือก นับ (*) จาก ข้อมูล .ทางสังคม ที่ไหน เว็บไซต์='อินสตาแกรม';

ในการดึงจำนวนแถวทั้งหมดที่ 'อายุ' มากกว่า 18 มีดังต่อไปนี้:

>> เลือก นับ (*) จาก ข้อมูล .ทางสังคม ที่ไหน อายุ> 18;

มาดึงข้อมูลของคอลัมน์ 'ผู้ใช้' และ 'เว็บไซต์' จากตารางโดยที่ชื่อผู้ใช้ขึ้นต้นด้วยตัวอักษร 'M' ลองทำตามคำแนะนำด้านล่างบนเชลล์

>> เลือก ผู้ใช้ ,เว็บไซต์ จาก ข้อมูล .ทางสังคม ที่ไหน ผู้ใช้ ชอบ 'NS%';

MySQL COUNT (นิพจน์)

ใน MySQL วิธี COUNT (นิพจน์) จะใช้เฉพาะเมื่อคุณต้องการนับค่าที่ไม่ใช่ค่า Null ของคอลัมน์ 'นิพจน์' 'นิพจน์' จะเป็นชื่อของคอลัมน์ใดๆ เรามาดูตัวอย่างง่ายๆ กัน เราได้นับเฉพาะค่าที่ไม่ใช่ค่าว่างของคอลัมน์ 'เว็บไซต์' ซึ่งเกี่ยวข้องกับคอลัมน์ 'อายุ' ที่มีค่าเท่ากับ '25' ดู! เรามีระเบียนที่ไม่เป็นค่าว่างเพียง 4 รายการสำหรับผู้ใช้ที่มีอายุ '25' ซึ่งกำลังใช้เว็บไซต์อยู่

>> เลือก นับ (เว็บไซต์) จาก ข้อมูล .ทางสังคม ที่ไหน อายุ= 25;

MySQL COUNT (นิพจน์ DISTNCT)

ใน MySQL ใช้เมธอด COUNT (DISTINCT expression) เพื่อรวมค่าที่ไม่ใช่ค่า Null และค่าเฉพาะของคอลัมน์ 'นิพจน์' ในการนับจำนวนค่าที่ไม่ใช่ค่าว่างในคอลัมน์ 'อายุ' ที่ชัดเจน เราได้ใช้ข้อความค้นหาด้านล่าง คุณจะพบระเบียน 6 รายการที่ไม่เป็นค่าว่างและชัดเจนของคอลัมน์ 'อายุ' จากตาราง 'สังคม' ซึ่งหมายความว่าเรามีทั้งหมด 6 คนที่มีอายุต่างกัน

>> เลือก นับ ( แตกต่าง อายุ) จาก ข้อมูล .ทางสังคม;

MySQL COUNT(IF(นิพจน์))

สำหรับการเน้นมาก คุณควรรวม COUNT() เข้ากับฟังก์ชันการควบคุมการไหล สำหรับผู้เริ่มต้น สำหรับส่วนของนิพจน์ที่ใช้ในเมธอด COUNT() คุณอาจใช้ฟังก์ชัน IF() อาจมีประโยชน์มากในการทำเช่นนี้เพื่อให้รายละเอียดข้อมูลภายในฐานข้อมูลอย่างรวดเร็ว เราจะนับจำนวนแถวที่มีเงื่อนไขอายุต่างกันและแบ่งออกเป็นสามคอลัมน์ที่แตกต่างกัน ซึ่งอาจกล่าวได้ว่าเป็นหมวดหมู่ ขั้นแรก COUNT(IF) จะนับแถวที่มีอายุน้อยกว่า 20 ปีและบันทึกการนับนี้ลงในคอลัมน์ใหม่ที่ชื่อว่า 'Teenage' COUNT(IF) ที่สองกำลังนับแถวที่มีอายุระหว่าง 20 ถึง 30 ปีในขณะที่บันทึกลงในคอลัมน์ 'Young' ประการที่สาม แถวสุดท้ายนับแถวที่มีอายุมากกว่า 30 ปีและบันทึกลงในคอลัมน์ 'ครบกำหนด' เรามีวัยรุ่น 5 คน เด็ก 9 คน และเป็นผู้ใหญ่เพียง 1 คนในบันทึกของเรา

>> เลือก นับ ( ถ้า (อายุ< ยี่สิบ,1, โมฆะ ))'วัยรุ่น', นับ ( ถ้า (อายุ ระหว่าง ยี่สิบ และ 30,1, โมฆะ ))'หนุ่มสาว', นับ ( ถ้า (อายุ> 30,1, โมฆะ ))'ผู้ใหญ่' จาก ข้อมูล .ทางสังคม;

MySQL COUNT(*) พร้อม GROUP BY Clause

คำสั่ง GROUP BY เป็นคำสั่ง SQL ที่ใช้สำหรับแถวกลุ่มที่มีค่าเดียวกัน ส่งกลับจำนวนค่าทั้งหมดที่อยู่ในแต่ละกลุ่ม ตัวอย่างเช่น หากคุณต้องการตรวจสอบหมายเลขของผู้ใช้แต่ละรายแยกกัน คุณต้องกำหนดคอลัมน์ 'ผู้ใช้' ด้วยส่วนคำสั่ง GROUP BY ในขณะที่นับระเบียนสำหรับผู้ใช้แต่ละรายด้วย COUNT(*)

>> เลือก ผู้ใช้ , นับ (*) จาก ข้อมูล .ทางสังคม จัดกลุ่มโดย ผู้ใช้ ;

คุณสามารถเลือกมากกว่าสองคอลัมน์ในขณะที่ทำการนับแถวพร้อมกับส่วนคำสั่ง GROUP BY ดังนี้

>> เลือก ผู้ใช้ ,อายุ,เว็บไซต์, นับ (*) จาก ข้อมูล .ทางสังคม จัดกลุ่มโดย เว็บไซต์;

หากเราต้องการนับแถวในขณะที่ใช้ส่วนคำสั่ง WHERE ซึ่งมีเงื่อนไขบางอย่างอยู่ข้าง GROUP BY และ COUNT(*) คุณก็สามารถทำได้เช่นกัน แบบสอบถามด้านล่างจะดึงและนับบันทึกของคอลัมน์: 'ผู้ใช้', 'เว็บไซต์' และ 'อายุ' โดยที่มูลค่าเว็บไซต์คือ 'Instagram' และ 'Snapchat' เท่านั้น คุณสามารถเห็นได้ว่าเรามีเพียง 1 ระเบียนสำหรับทั้งสองเว็บไซต์สำหรับผู้ใช้ที่แตกต่างกัน

>> เลือก ผู้ใช้ ,เว็บไซต์,อายุ, นับ (*) จาก ข้อมูล .ทางสังคม ที่ไหน เว็บไซต์='อินสตาแกรม' หรือ เว็บไซต์='สแน็ปแชท' จัดกลุ่มโดย เว็บไซต์,อายุ;

MySQL COUNT(*) พร้อม GROUP BY และ ORDER BY Clause

ลองใช้ส่วนคำสั่ง GROUP BY และ ORDER BY ร่วมกับวิธี COUNT() มาดึงและนับแถวของตาราง 'โซเชียล' ขณะจัดเรียงข้อมูลตามลำดับจากมากไปน้อยโดยใช้แบบสอบถามนี้:

>> เลือก ผู้ใช้ ,เว็บไซต์,อายุ, นับ (*) จาก ข้อมูล .ทางสังคม จัดกลุ่มโดย อายุ สั่งโดย นับ (*) รายละเอียด ;

การสืบค้นที่ระบุด้านล่างจะนับแถวก่อน จากนั้นจึงแสดงเฉพาะระเบียนที่มี COUNT มากกว่า 2 ตามลำดับจากน้อยไปมาก

>> เลือก ผู้ใช้ ,อายุ, นับ (*) จาก ข้อมูล .ทางสังคม จัดกลุ่มโดย อายุ มี นับ (*) > 2 สั่งโดย นับ (*) ASC ;

บทสรุป

เราได้ใช้วิธีการที่เป็นไปได้ทั้งหมดในการนับการจับคู่หรือบันทึกที่ซ้ำกันโดยใช้วิธี COUNT() กับส่วนคำสั่งอื่นที่แตกต่างกัน