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

Spread the love

โจทย์การทำงานหนึ่งอย่างที่มักจะมาพร้อมกับการเขียน 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

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

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

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