เมื่อต้องการนับจำนวนรายการตามเงื่อนไข แต่ก็จำเป็นต้องใช้ GROUP BY เพราะการใช้ COUNT + DISTINCT ไม่สามารถดึงข้อมูลตามเงื่อนไขได้
อยากจะนับจำนวนสมาชิกที่ชำร ะเงิน
ถ้าใช้ COUNT() ก็จะออกมาหมด ทำให้ได้จำนวนเกินจากความเป ็นจริง เพราะสมาชิกบางคนชำระมากกว่ า 1 ครั้ง
ก็เลยต้องเอามา GROUP กันด้วย รหัสสมาชิกก่อน เพื่อตัดเรคอร์ดที่ซ้ำกันออ กไป สมาชิกจะชำระกี่ครั้ง ก็นับเป็น 1 คน (เพราะเป็นสมาชิกคนเดียวกัน )
จะเห็นว่า จะได้ยอดที่ถูกต้อง 139
แต่ข้อมูลมันแจกแจงรายการต้ อง 139 แถว ซึ่งเราไม่ได้อยากได้รายละเ อียด แค่อยากนับจำนวนเท่านั้นจะท ำไงล่ะทีนี้
ก็จัดการ SELECT ครอบ SELECT ไว้เลย ซึ่งก็คือการทำ SubQuery นั่นเอง
ก็จะออกมาเรคอร์ดเดียว เป็นจำนวนที่ต้องการนำไปใช้ งานได้ทันที
ก็จะออกมาเรคอร์ดเดียว เป็นจำนวนที่ต้องการนำไปใช้
จริงๆแล้วเราใช้ DISTINCT ได้นะ ถ้าเงื่อนไขมีแค่เท่านี้ ไม่จำเป็นต้อง SubQuery
ดูสิ พอนับแบบตัดรายการซ้ำกันออก ก็ได้
139 พอดิบพอดีเลย
ใช่ครับ ถ้าเงื่อนไขมีเพียงเท่านี้ก ็ใช้ได้เลย
แต่ถ้ามีเงื่อนไขอื่นล่ะ???
ดูสิ พอนับแบบตัดรายการซ้ำกันออก
139 พอดิบพอดีเลย
ใช่ครับ ถ้าเงื่อนไขมีเพียงเท่านี้ก
แต่ถ้ามีเงื่อนไขอื่นล่ะ???
ถ้าจะนับเฉพาะสมาชิกที่ชำระ เงินตั้งแต่ 1500 บาทขึ้นไปเท่านั้นล่ะ?
ค่าที่ได้มาก็มีโอกาสผิดเพี ้ยนนะ เพราะบางคนก็ชำระหลายครั้ง แต่พอรวมกันก็ถึง 1500 บาทเหมือนกันนะ
ตัวอย่างนี้ได้แค่ 61 แต่จริงๆแล้ว มี 64 คนเลยนะ!
ค่าที่ได้มาก็มีโอกาสผิดเพี
ตัวอย่างนี้ได้แค่ 61 แต่จริงๆแล้ว มี 64 คนเลยนะ!
กลับไปที่การ GROUP BY กันต่อ
เราสามารถใช้เงื่อนไข SUM ใน HAVING ได้นะ คือหลังจากเอามา GROUP กันแล้ว
บางคนที่ชำระ 3 ครั้ง ก็จะ SUM รวมเป็นยอดเดียว ก็มีโอกาสถึง 1500 บาท
อีกตั้ง 3 คนแน่ะ >O<
ผลลัพธ์ที่ได้คือ 64 คน คือคำตอบที่ต้องการ
แต่ทีนี้ผลลัพธ์ที่ได้มันแจ กแจงรายการไง กลายเป็น 64 เรคอร์ด ถ้าอยากได้แค่จำนวนก็ต้อง SubQuery แบบเดิมอีกครั้ง
พอเขียน SELECT ครอบเข้าไป
เราก็จะได้ผลลัพธ์ 64 ออกมาเรคอร์ดเดียวไว้ใช้งาน แล้วล่ะ ^O^
โค้ด SQL
SELECT
COUNT(*) AS totalFROM (SELECTCOUNT(*)FROMtb_paymentGROUP BYmember_idHAVINGSUM(amount_pay) > 1500) AS tb_count
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ความคิดเห็น
แสดงความคิดเห็น