แน่นอนว่าในการทำงานจริง บ่อยครั้งเรามักจะมีโจทย์ในการนับจำนวน แบบหลายเงื่อนไขเข้ามาเกี่ยวข้อง เช่น อยากหาสินค้าที่อยู่ในแต่ละประเภท ครั้นจะเขียน 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
- COUNT IF และ SUM IF MySQL นับข้อมูลหลายเงื่อนไขพร้อมกัน
- SQL COUNT นับจำนวนข้อมูลตามช่วงเวลา แบบปกติและหลายเงื่อนไข
- คําสั่ง SQL นับ/แสดง ข้อมูลแบบไม่ซ้ำกัน ด้วย DISTINCT
- คําสั่ง SQL ดึงข้อมูลที่ซ้ำกัน Query duplicate data database
- ฐานข้อมูล จังหวัด อําเภอ ตําบล รหัสไปรษณีย์ อัพเดท 2023 พร้อมตัวอย่างคำสั่ง SQL
เป็นยังไงกันบ้างคะ ไม่ยากเลยใช่ไหมหละกับวิธีทำ SQL Query หลายเงื่อนไข ดูเพลินก็หวังว่าบทความของเราจะเป็นประโยชน์ต่อท่านไม่มากก็น้อย นอกจากนี้ เรายังมีบทความดี ๆ อีกมากมาย คุณสามารถลองคลิกเขาไปอ่านบทความอื่น ๆ ตามลิงค์ด้านล่างได้เลย