ไม่จำเป็นต้องมี group by ก็ได้หากทุกคอลัมน์ใน select เป็น aggregate function ทั้งหมด เช่น select count(*) from table แต่เขียน select gender, count(gender) from table group by gender จะเป็นการนับจำนวนแถวแยกตามเพศ
ผมเขียน Queary ชุดที่ 1,2และ3 แยกกันเเล้วสามารถ รันผลออกมาถูกต้องครับ เเต่มีข้อสงสัยว่า "เวลานำมา เขียนรวมกัน เเล้ว Group BY ออกมา เเล้วผลลัพท์ ถึงไม่ตรงตามข้อมูลใน DB ครับ" code ดังนี้ ครับ 1 SELECT tb_checkname.cnstdID, SUM(tb_checkname.cnScore) From tb_checkname GROUP BY tb_checkname.cnstdID; 2 SELECT tb_exams.eaStdID,SUM(tb_exams.eaScore) FROM tb_exams GROUP BY tb_exams.eaStdID 3 SELECT tb_checkjob.cjStdID,SUM(tb_checkjob.cjScore) FROM tb_checkjob GROUP BY tb_checkjob.cjStdID โค็ดรวม ครับ SELECT tb_checkname.cnstdID, SUM(tb_checkname.cnScore) , SUM(tb_exams.eaScore),SUM(tb_checkjob.cjScore) From tb_checkname , tb_exams , tb_checkjob WHERE (tb_checkname.L_id = tb_exams.L_id AND tb_checkjob.L_id = tb_exams.L_id) GROUP BY tb_checkname.cnstdID ; เชื่อมตารางด้วย L_id ครับ
อาจารย์สอนดีมากๆเลยคะ ช่วยทำคริปเพิ่มเกี่ยวกับเรื่องนี้เยอะๆได้มั้ยคะหนูกำลังเรียนอยู่ และก็งงๆแต่อาจารย์ได้คลายทุกปมสงสัยเลยคะ ขอบคุณล่วงหน้านะคะ
อาจารย์ ลงsql ผิดเปล่าครับ มันต้องมีสองตัวไม่ใช่หรอครับ แต่อจารย์ลงให้แค่ตัวเดียว
เวลาเราเขียนให้มี aggregate function ใน select เราไม่จำเป็นต้อง group by ... หรอครับ
ไม่จำเป็นต้องมี group by ก็ได้หากทุกคอลัมน์ใน select เป็น aggregate function ทั้งหมด เช่น
select count(*) from table
แต่เขียน
select gender, count(gender) from table group by gender
จะเป็นการนับจำนวนแถวแยกตามเพศ
ผมเขียน Queary ชุดที่ 1,2และ3 แยกกันเเล้วสามารถ รันผลออกมาถูกต้องครับ
เเต่มีข้อสงสัยว่า "เวลานำมา เขียนรวมกัน เเล้ว Group BY ออกมา เเล้วผลลัพท์ ถึงไม่ตรงตามข้อมูลใน DB ครับ"
code ดังนี้ ครับ
1
SELECT tb_checkname.cnstdID, SUM(tb_checkname.cnScore)
From tb_checkname
GROUP BY tb_checkname.cnstdID;
2
SELECT tb_exams.eaStdID,SUM(tb_exams.eaScore)
FROM tb_exams
GROUP BY tb_exams.eaStdID
3
SELECT tb_checkjob.cjStdID,SUM(tb_checkjob.cjScore)
FROM tb_checkjob
GROUP BY tb_checkjob.cjStdID
โค็ดรวม ครับ
SELECT tb_checkname.cnstdID, SUM(tb_checkname.cnScore) , SUM(tb_exams.eaScore),SUM(tb_checkjob.cjScore)
From tb_checkname , tb_exams , tb_checkjob
WHERE (tb_checkname.L_id = tb_exams.L_id
AND tb_checkjob.L_id = tb_exams.L_id)
GROUP BY tb_checkname.cnstdID
;
เชื่อมตารางด้วย L_id ครับ
ผิดครับ