SQL COUNT นับจำนวนข้อมูลตามช่วงเวลา แบบปกติและหลายเงื่อนไข

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

วิธีเขียน SQL Query นับจำนวนตามช่วงเวลา แบบเงื่อนไขเดียว

จากรูปตัวอย่าง เราจะมาทำคำสั่ง SQL สำหรับ Count ข้อมูลตามช่วงเวลาแบบเงื่อนไขเดียวกันก่อน ตัวอย่างที่เราจะทำก็คือ แสดงข้อมูลจำนวนข้อมูล Post type แบ่งตามประเภท Post และกำหนดช่วงเวลาจากวันที่ 1 ม.ค. 22 - 30 มิ.ย 22 จะต้องเขียนคำสั่ง SQL ยังไง มาดูกัน

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-01-01' AND '2022-06-30'

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

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

WHERE YEAR(t1.post_date) BETWEEN '2021' AND '2022'

ได้เช่นกัน

วิธีเขียน SQL Query นับจำนวนตามช่วงเวลา แบบหลายเงื่อนไข

ที่นี่เรามาดูตัวอย่างการเขียนคำสั่ง SQL หาจำนวนตามช่วงเวลา แบบหลายเงื่อนไขกันมา ตัวอย่าง เราจะทำการนับ Post type "attachment" ตามแต่ละช่วงเวลา โดยแบ่งเป็น 3 ไตรมาส คือ

  • มกราคม - เมษายน
  • พฤษภาคม - สิงหาคม
  • กันยายน - ธันวาคม

โดยจะนับว่าแต่ละไตรมาสมีจำนวน Post type "attachment" และคุณสามารถใช้งาน Sum if มาช่วยในการหาข้อมูลเหล่านั้น ที่นี่มาดูตัวอย่าง SQL Query ดูว่าเราจะเขียนกันยังไง

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 ช่วงเวลา ตามรูปด้านล่าง

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

BETWEEN '2022-01-01' AND '2022-01-31' หากคุณต้องการหาช่วงเวลาตามเดือน

หรือถ้าหากคุณอยากค้นหาแบบแยกเป็นรายปี ก็สามารถเขียนคำสั่ง SQL แบบนี้ได้เช่นกัน

SELECT
SUM(IF(t1.post_type = 'attachment' AND YEAR(t1.post_date) = '2020',1,0)) AS cnt_2020,
SUM(IF(t1.post_type = 'attachment' AND YEAR(t1.post_date) = '2021',1,0)) AS cnt_2021,
SUM(IF(t1.post_type = 'attachment' AND YEAR(t1.post_date) = '2022',1,0)) AS cnt_2022
FROM `wp_posts` AS t1

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

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

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

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

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

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

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

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

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

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

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

ดูเพลิน Admin - 21 ธ.ค. 65
PHP วิธีการ Save Array Object ลงฐานข้อมูล

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

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

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

ดูเพลิน Admin - 21 ธ.ค. 65
COUNT IF และ SUM IF MySQL นับข้อมูลหลายเงื่อนไขพร้อมกัน

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

ดูเพลิน Admin - 21 ธ.ค. 65

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

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