การหารจำนวนเต็มเทียบกับทศนิยม
หลีกเลี่ยงผลลัพธ์ที่คาดไม่ถึงด้วยการแปลงชนิดข้อมูล
การหารจำนวนเต็มเทียบกับทศนิยม เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
ผลลัพธ์ที่น่าประหลาดใจ
เริ่มด้วยโจทย์ปริศนากันก่อน คุณคิดว่าคิวรีต่อไปนี้จะให้ผลลัพธ์เป็นอย่างไร
หากคุณคาดว่าจะได้ 0.5 คุณอาจประหลาดใจ ในฐานข้อมูล SQL หลายระบบ การหารจำนวนเต็มสองจำนวนจะให้ผลลัพธ์เป็นจำนวนเต็ม โดยตัดส่วนทศนิยมออกทั้งหมด
SELECT 1 / 2 AS result;อธิบายการหารจำนวนเต็ม
เมื่อตัวถูกดำเนินการทั้งสองตัวในการหารเป็นจำนวนเต็ม SQL จะทำการหารจำนวนเต็ม ผลลัพธ์จะถูกตัดเข้าหาศูนย์ ไม่มีการปัดเศษ เหลือเพียงส่วนจำนวนเต็ม
ดังนั้น 1 / 2 = 0, 7 / 3 = 2 และ 9 / 4 = 2 ส่วนเศษทศนิยมจะถูกทิ้งไปโดยไม่มีการแจ้งเตือน
SELECT 7 / 3 AS truncated_result;ตัวอย่างการหารจำนวนเต็มเพิ่มเติม
ต่อไปนี้คือตัวอย่างการหารจำนวนเต็มหลายรายการในคิวรีเดียว โปรดสังเกตว่าผลลัพธ์ทั้งหมดสูญเสียส่วนทศนิยมไป พฤติกรรมนี้เหมือนกันสำหรับนิพจน์ที่ประกอบด้วยค่าคงที่จำนวนเต็มหรือคอลัมน์จำนวนเต็มเท่านั้น
SELECT
10 / 4 AS ten_div_four,
9 / 2 AS nine_div_two,
1 / 3 AS one_div_three,
6 / 6 AS six_div_six;แก้ปัญหาด้วย CAST
วิธีที่น่าเชื่อถือที่สุดในการบังคับให้เกิดการหารแบบทศนิยมคือแปลงชนิดข้อมูลของตัวถูกดำเนินการอย่างน้อยหนึ่งตัวให้เป็นชนิดทศนิยม CAST(value AS DECIMAL) หรือ CAST(value AS NUMERIC) จะบอกให้ SQL ถือว่าตัวเลขนั้นเป็นค่าจุดลอยตัว ดังนั้นการหารจึงให้ผลลัพธ์ที่แม่นยำ
SELECT CAST(1 AS DECIMAL) / 2 AS result;ใช้ CAST กับทั้งสองข้าง
คุณต้องแปลงชนิดข้อมูลเพียงด้านใดด้านหนึ่งของการหารเพื่อให้ได้ผลลัพธ์แบบทศนิยม SQL จะยกระดับชนิดของตัวถูกดำเนินการอีกด้านให้โดยอัตโนมัติ อย่างไรก็ตาม การแปลงชนิดข้อมูลทั้งสองด้านทำให้เจตนาชัดเจนและช่วยหลีกเลี่ยงความสับสนเมื่อกลับมาอ่านโค้ดภายหลัง
SELECT
CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
CAST(7 AS DECIMAL) / 3 AS one_cast;การใช้ค่าคงที่ทศนิยม
อีกวิธีที่ทำได้รวดเร็วคือเขียนตัวถูกดำเนินการตัวหนึ่งเป็นค่าคงที่ทศนิยมด้วยการเติม .0 SQL จะมองว่า 1.0 เป็นจำนวนทศนิยม ซึ่งบังคับให้นิพจน์ทั้งหมดใช้การคำนวณแบบทศนิยม
วิธีนี้เหมาะสำหรับคิวรีเฉพาะกิจอย่างรวดเร็ว แต่ CAST จะสื่อความหมายได้ชัดเจนกว่าในโค้ดที่ใช้งานจริง
SELECT 1.0 / 2 AS decimal_result,
7.0 / 3 AS another_result;กับดักจากการใช้งานจริง: ข้อมูลในคอลัมน์
ปัญหานี้ส่งผลชัดเจนเมื่อทำงานกับคอลัมน์จำนวนเต็ม ลองนึกภาพตารางที่ติดตามเป้าหมายยอดขาย การหารคอลัมน์จำนวนเต็มจะให้ผลลัพธ์เป็นจำนวนเต็ม ทำให้อัตราการแปลงเป็น 0 ทั้งที่ควรเป็น 0.75!
CREATE TABLE sales_targets (
rep TEXT,
achieved INT,
target INT
);
INSERT INTO sales_targets VALUES
('Alice', 75, 100),
('Bob', 3, 4),
('Carol', 9, 10);
SELECT rep,
achieved / target AS wrong_rate
FROM sales_targets;แก้ไขการหารคอลัมน์
ใช้ CAST กับคอลัมน์ตัวเศษ แล้วการหารจะคืนค่าอัตราการแปลงที่แท้จริงในรูปทศนิยม ตัวส่วนจะถูกยกระดับประเภทข้อมูลโดยอัตโนมัติ
การคูณด้วย 100.0 ในภายหลังจะให้ผลลัพธ์เป็นเปอร์เซ็นต์ โดยยังคงใช้การคำนวณแบบทศนิยมตลอดกระบวนการ
SELECT rep,
CAST(achieved AS DECIMAL) / target AS conversion_rate,
CAST(achieved AS DECIMAL) / target * 100.0 AS pct
FROM sales_targets;ควบคุมความละเอียดของทศนิยม
คุณสามารถควบคุมจำนวนตำแหน่งทศนิยมที่จัดเก็บได้โดยระบุความละเอียดและจำนวนหลักทศนิยมในการแปลงประเภทข้อมูล: DECIMAL(10, 2) หมายถึงมีตัวเลขได้สูงสุด 10 หลักรวมทั้งหมด และมี 2 หลักหลังจุดทศนิยม วิธีนี้มีประโยชน์เมื่อต้องการผลลัพธ์ที่เรียบร้อยและปัดเศษแล้ว แทนที่จะมีตัวเลขต่อท้ายจำนวนมาก
SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;ROUND หลังการหาร
บางครั้งคุณอาจต้องการคำนวณภายในด้วยความละเอียดเต็มที่ แล้วจึงปัดเศษค่าที่จะแสดงผลในขั้นสุดท้าย ฟังก์ชัน ROUND รับค่าและจำนวนตำแหน่งทศนิยมที่ต้องการเก็บไว้
ให้หารก่อนเสมอโดยใช้การคำนวณแบบทศนิยม แล้วจึงปัดเศษ ห้ามปัดเศษก่อนหาร
SELECT
ROUND(CAST(1 AS DECIMAL) / 3, 4) AS four_places,
ROUND(CAST(1 AS DECIMAL) / 3, 2) AS two_places,
ROUND(CAST(1 AS DECIMAL) / 3, 0) AS zero_places;การหารจำนวนเต็มอาจมีประโยชน์
การหารจำนวนเต็มไม่ใช่ข้อผิดพลาดเสมอไป เพราะบางครั้งนี่คือสิ่งที่คุณต้องการพอดี ตัวอย่างเช่น การแปลงจำนวนนาทีทั้งหมดเป็นจำนวนชั่วโมงเต็มนั้นตั้งใจใช้การหารจำนวนเต็ม ประเด็นสำคัญคือคุณต้อง เลือก การหารจำนวนเต็มหรือการหารแบบทศนิยมอย่างมีเจตนา แทนที่จะปล่อยให้เกิดขึ้นโดยไม่ตั้งใจ
SELECT
137 / 60 AS full_hours,
137 % 60 AS remaining_minutes;ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการหารจำนวนเต็มเทียบกับการหารแบบทศนิยมใน SQL
ทบทวนบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้วิธีที่ SQL จัดการกับการหารระหว่างจำนวนเต็ม:
- จำนวนเต็ม / จำนวนเต็ม จะตัดส่วนทศนิยมของผลลัพธ์ออก ทำให้ส่วนนั้นหายไปโดยไม่มีการแจ้งเตือน
- ใช้
CAST(value AS DECIMAL)กับตัวถูกดำเนินการอย่างน้อยหนึ่งตัวเพื่อบังคับให้เป็นการหารแบบทศนิยม - การเขียนค่าคงที่ทศนิยม เช่น
1.0ก็ทำให้นิพจน์ถูกยกระดับเป็นการคำนวณแบบทศนิยมเช่นกัน - ใช้
ROUNDหลังการหารเพื่อควบคุมจำนวนตำแหน่งทศนิยมที่แสดง - บางครั้งการหารจำนวนเต็มเป็นสิ่งที่ตั้งใจ เช่น การแปลงนาทีเป็นชั่วโมง แต่ควรเลือกใช้อย่างมีสติ ไม่ใช่เกิดขึ้นโดยบังเอิญ
โปรดระวังกับดักนี้ทุกครั้งที่หารคอลัมน์จำนวนเต็ม เพราะเป็นหนึ่งในสาเหตุที่พบบ่อยที่สุดของข้อผิดพลาดในคิวรี SQL ซึ่งเกิดขึ้นเงียบ ๆ และตรวจพบได้ยาก
เรียนรู้ SQL ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 46
- บทเรียน
- 183
คำถามที่พบบ่อย
บทเรียน “การหารจำนวนเต็มเทียบกับทศนิยม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การหารจำนวนเต็มเทียบกับทศนิยม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การหารจำนวนเต็มเทียบกับทศนิยม”
หลีกเลี่ยงผลลัพธ์ที่คาดไม่ถึงด้วยการแปลงชนิดข้อมูล คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การหารจำนวนเต็มเทียบกับทศนิยม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เลขคณิตและตัวดำเนินการ
- การปัดเศษและตัดทศนิยม
- การหารจำนวนเต็มเทียบกับทศนิยม
- ฟังก์ชันคณิตศาสตร์ที่มีประโยชน์