COUNT IF และ SUM IF MySQL นับข้อมูลหลายเงื่อนไขพร้อมกัน

แน่นอนว่าในการทำงานจริง บ่อยครั้งเรามักจะมีโจทย์ในการนับจำนวน แบบหลายเงื่อนไขเข้ามาเกี่ยวข้อง เช่น อยากหาสินค้าที่อยู่ในแต่ละประเภท ครั้นจะเขียน SQL เพื่อหาข้อมูลที่ละเงื่อนไขมันก็คงจะใช้ที่ ดังนั้นวันนี้ดูเพลินจึงได้นำเทคนิคการนับจำนวนแบบหลายเงื่อนไขโดยเขียน Query แค่ชุดเดียวมาฝากกัน จะเป็นอย่างไรไปดู

วิธีเขียน SQL Query นับจำนวนแบบหลายเงื่อนไข หรือ Count if / Sum if แบบหลายเงื่อนไข

จากรูปตัวอย่าง หากเราต้องการนับ Post type แต่ละประเภทว่ามีจำนวนเท่าไหร่ เราสามารถเขียน SQL Count หลายเงื่อนไขได้ดังนี้

1. สิ่งแรกที่เราควรจะรู้ก่อนคือภายในตารางนี้มี post type อยู่กี่ประเภท โดยเราสามารถใช้ Query

SELECT DISTINCT post_type FROM `wp_posts`;

* คำสั่ง DISTINCT ใช้สำหรับการหาค่าในที่ไม่ซ้ำกัน

ผลลัพธ์ที่ได้คือคุณจะได้รายการ Post type ตามตัวอย่างนี้

ที่นี้เราก็มาเขียน SQL count เพื่อจำนวนที่เราต้องการได้เลย ตัวอย่างนี้ เราจะลองนับจำนวน post_type ที่มีค่าเท่ากับ career, news, page และ products มาลองดูตัวอย่าง Query กัน

SELECT
SUM(IF(t1.post_type = 'career',1,0)) AS count_career,
SUM(IF(t1.post_type = 'news',1,0)) AS count_news,
SUM(IF(t1.post_type = 'page',1,0)) AS count_page,
SUM(IF(t1.post_type = 'products',1,0)) AS count_products
FROM `wp_posts` AS t1

จาก Query ตัวอย่างด้านบน เราจะได้ผลลัพธ์ดังนี้

จะเห็นได้ว่า เราสามารถนับจำนวนโดยแยกตามประเภทได้อย่างง่าย ๆ เลยใช่ไหมหละ

ที่นี่หากเราต้องการเพิ่มเงื่อนไขเรื่องวันที่เข้าไปในการค้นหา ตัวอย่าง ต้องการทราบว่า Post type ประเภทต่าง ๆ ถูกสร้างขึ้นในช่วงระหว่าง วันที่ 1 พ.ย 22 - 31 ธ.ค. 22 มีจำนวนเท่าไหร่ ก็สามารถเขียนได้แบบนี้

SELECT
SUM(IF(t1.post_type = 'career',1,0)) AS count_career,
SUM(IF(t1.post_type = 'news',1,0)) AS count_news,
SUM(IF(t1.post_type = 'page',1,0)) AS count_page,
SUM(IF(t1.post_type = 'products',1,0)) AS count_products
FROM `wp_posts` AS t1
WHERE t1.post_date BETWEEN '2022-11-01' AND '2022-12-31'

จาก Query ตัวอย่างด้านบน เราจะได้ผลลัพธ์ดังนี้

จะเห็นได้เราเราสามารถจำกัดขอบเขตในการค้นหาได้ด้วยการใช้งาน เงื่อนไขผ่านคำสั่ง WHERE

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

ตัวอย่าง หากคุณต้องการหาข้อมูลจำนวน ตามไตรมาส โดยแบบตามช่วงเวลาเป็นระหว่างวันที่ คุณก็สามารถทำมันง่าย ๆ ได้ดังนี้

SELECT
SUM(IF(t1.post_type = 'attachment' AND t1.post_date BETWEEN '2022-01-01' AND '2022-04-30',1,0))
AS count_quarter1,
SUM(IF(t1.post_type = 'attachment' AND t1.post_date BETWEEN '2022-05-01' AND '2022-08-31',1,0))
AS count_quarter2,
SUM(IF(t1.post_type = 'attachment' AND t1.post_date BETWEEN '2022-09-01' AND '2022-12-31',1,0))
AS count_quarter3
FROM `wp_posts` AS t1

จาก Query ตัวอย่างด้านบน คุณจะได้ผลลัพธ์เป็นข้อมูลใน 3 ช่วงเวลา ตามรูปด้านล่าง

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

เทคนิคอื่นๆ เกี่ยวกับการเขียนโค้ด คลิก

อย่าลืมไปติดตาม Facebook fanpage ของเรา >> Click <<

หมวดหมู่เกี่ยวกับ Coding

เนื้อหาที่คล้ายกัน...

PHP วิธีการ Save Array Object ลงฐานข้อมูล

PHP วิธีการ Save Array Object ลงฐานข้อมูล

ดูเพลิน Admin - 26 ม.ค. 66
คําสั่ง SQL นับ/แสดง ข้อมูลแบบไม่ซ้ำกัน ด้วย DISTINCT

คําสั่ง SQL นับ/แสดง ข้อมูลแบบไม่ซ้ำกัน ด้วย DISTINCT

ดูเพลิน Admin - 21 ธ.ค. 65
PHP + MySQL แก้ปัญหา ภาษาต่างดาว ในหน้าเว็บไซต์

PHP + MySQL แก้ปัญหา ภาษาต่างดาว ในหน้าเว็บไซต์

ดูเพลิน Admin - 28 ธ.ค. 65
คําสั่ง SQL ดึงข้อมูลที่ซ้ำกัน Query duplicate data database

คําสั่ง SQL ดึงข้อมูลที่ซ้ำกัน Query duplicate data database

ดูเพลิน Admin - 21 ธ.ค. 65
วิธีทำ Textbox Autocomplete จากฐานข้อมูล ด้วย jQuery Ajax

วิธีทำ Textbox Autocomplete จากฐานข้อมูล ด้วย jQuery Ajax

ดูเพลิน Admin - 16 ม.ค. 66

เรื่องราวเอื่น ๆ ในหมวดเทคนิคการเขียนโค้ด...

let value = 147/32; let result_value = Math.round(value); console.info('Value = '+value+' Result = '+result_value); //ผลลัพธ์ Value = 4.59 Result = 5let value = 147/33; let result_value = Math.round(value); console.info('Value = '+value+' Result = '+result_value); //ผลลัพธ์ Value = 4.454 Result = 4