ถามเรื่องคำสั่ง SQL select count .... where ครับ

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ถามเรื่องคำสั่ง SQL select count .... where ครับ

ถามเรื่องคำสั่ง SQL select count .... where ครับ

ผมจะทำการนับ คะแนนแบบสอบถาม

ตัวอย่าง แบบสอบถามมีทั้งหมด 3 ข้อ แล้วใช้วิธี เก็บ 1 ข้อคือ 1 field  รวมแล้วมีทั้งหมด 3 field

โดยที่ คะแนนมีให้ตั้งแต่ 1 ถึง 5

จะทำการนับ คะแนนโดยแยก ตามแต่ละข้อ ว่า ข้อที่ 1 นั้นมีคน ให้คะแนน =1 กี่คน ,  คะแนน=2 กี่คน , คะแนน=3 กี่คน , คะแนน=4กี่คน , คะแนน=5 กี่คน

มีวิธี count โดยอยู่ใน การ query ครั้งเดียวหรือไม่ครับ

หรือต้องแยก query ไปทั้งหมด 5 ครั้ง ตาม คะแนนที่ต้องการ count
แล้วทั้งหมด 3 ครั้ง ตามจำนวนข้อ
รวมแล้วเป็น 3 * 5 = 15 query
เช่น

SELECT count( q1 ) FROM table WHERE q1=5
SELECT count( q1 ) FROM table WHERE q1=4
SELECT count( q1 ) FROM table WHERE q1=3
SELECT count( q1 ) FROM table WHERE q1=2
SELECT count( q1 ) FROM table WHERE q1=1

SELECT count( q2 ) FROM table WHERE q2=5
SELECT count( q2 ) FROM table WHERE q2=4
SELECT count( q2 ) FROM table WHERE q2=3
SELECT count( q2 ) FROM table WHERE q2=2
SELECT count( q2 ) FROM table WHERE q2=1

SELECT count( q3 ) FROM table WHERE q3=5
SELECT count( q3 ) FROM table WHERE q3=4
SELECT count( q3 ) FROM table WHERE q3=3
SELECT count( q3 ) FROM table WHERE q3=2
SELECT count( q3 ) FROM table WHERE q3=1


SELECT count( q1 ) , count( q2 ) , count( q3 ) FROM table WHERE q1=3 AND q2=3 AND q3=3

 

 



Likit 11-04-2011 09:35:16

คำแนะนำ และการใช้งาน

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


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1

 ตรง SELECT count( q1 ) , count( q2 ) , count( q3 ) FROM table WHERE q1=3 AND q2=3 AND q3=3
อันนี้ไม่เกี่ยวครับ พิมพ์เกิด ลองแล้วไม่ใช่เงื่อนไข ข้อมูลมันไม่ตรง

ผมลอง
SELECT count(c1) FROM table GROUP BY c1 ORDER BY c1 DESC
ข้อมูลมันออกมา ได้ตามต้องการครับ ออกมา ใน ลักษณะ เป็น row  นับคะแนนให้
แต่ติดอยู่ที่ว่า เกิด ใน  q1 นั้น มี คนให้ คะแนน ไม่ครบทุก คะแนน  มันก็จะนับ มาไม่ครบ เช่น
มีคน กรอกแบบสอบถามมาทั้งหมด 10 คน ตามนี้  แล้วให้ คะแนน q1 ตามนี้
5
4
5
5
5
4
2
4
5
1

จากคำสั่ง SELECT GROUP BY จะได้ ผลมาเป็นแบบนี้
5    (จำนวน คนให้ คะแนน = 5) 
3    (จำนวน คนให้ คะแนน = 4) 
1    (จำนวน คนให้ คะแนน = 2) 
1    (จำนวน คนให้ คะแนน = 1) 

จะเห็นได้ว่า คนให้คะแนน = 3  นั้นไม่มี มันเลยข้ามไป
 



Likit 11-04-2011 10:52
 ความคิดเห็นที่ 2
SELECT 
(COUNT(IF(q1=5,1,0))) as score5,
(COUNT(IF(q1=4,1,0))) as score4,
(COUNT(IF(q1=3,1,0))) as score3,
(COUNT(IF(q1=2,1,0))) as score2,
(COUNT(IF(q1=1,1,0))) as score1 
FROM table 

แนวมันๆ น่ะลองดูได้ไหม 

 



Ninenik 11-04-2011
 ความคิดเห็นที่ 3

ขอบคุณมากๆครับ ได้แล้วครับ

แต่มีการแก้ไข เพิ่มนิดนึง คือ ให้ตัด เงื่อนไข ตรง IF ที่เป็น เท็จ ออกไปไม่ต้องกำหนดค่า

เพราะถ้ามีการกำหนดค่าไป COUNT มันจะนับทั้งหมด ทั้ง จริง เท็จ ถ้าไม่มีการกำหนด ค่า เมื่อเป็น เท็จ มันจะ มีค่าแต่ที่เป็นจริง แล้ว COUNT จะไม่นับ

SELECT 
(COUNT(IF(q1=5,1))) as score5,
(COUNT(IF(q1=4,1))) as score4,
(COUNT(IF(q1=3,1))) as score3,
(COUNT(IF(q1=2,1))) as score2,
(COUNT(IF(q1=1,1))) as score1 
FROM table 

เพิ่มเติมอีกนิดครับ สำหรับ คำสั่ง IF ใน Microsoft Access ใช้เป็น IIF  



Likit 11-04-2011 12:42
 ความคิดเห็นที่ 4

 บอกผิดไป เป็น sum น่ะ

SELECT 
(SUM(IF(q1=5,1,0))) as score5,
(SUM(IF(q1=4,1,0))) as score4,
(SUM(IF(q1=3,1,0))) as score3,
(SUM(IF(q1=2,1,0))) as score2,
(SUM(IF(q1=1,1,0))) as score1 
FROM table 

 



Ninenik 11-04-2011
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ