SQL Academy · บทเรียน

การหารจำนวนเต็มเทียบกับทศนิยม

หลีกเลี่ยงผลลัพธ์ที่คาดไม่ถึงด้วยการแปลงชนิดข้อมูล

บทเรียน 3 จาก 413 ขั้นตอน

การหารจำนวนเต็มเทียบกับทศนิยม เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เลขคณิตและตัวดำเนินการ
  2. การปัดเศษและตัดทศนิยม
  3. การหารจำนวนเต็มเทียบกับทศนิยม
  4. ฟังก์ชันคณิตศาสตร์ที่มีประโยชน์
← กลับไปที่ SQL Academy