ตัวอย่างคิวรีหลายชั้นหาสินค้าขายเร็ว


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

ตัวอย่างคิวรีหลายชั้นหาสินค้าขายเร็ว

 

เพื่อให้ประโยคกระชับอ่านง่าย ต่อไปนี้ผู้เขียนจะแทนคำว่า “คิวรีหลายชั้น” ด้วยสัญลักษณ์ µ แทนคำว่า “คิวรีหลัก” ด้วย สัญลักษณ์ λ และ “คิวรีย่อย” ด้วยสัญลักษณ์ Σ

หัวข้อนี้ผู้เขียนจะสาทิตการเขียน µ เพื่อหารายการหนังสือที่ขายได้เร็วที่สุด โจทย์คือ "จงหารายการหนังสือที่ขายออกไปในวันเดียวกันกับวันแรกที่สั่งมาเก็บในสต็อก" สมมุติว่าวันแรกที่สั่งมาเก็บในสต็อกเป็นค่าตายตัว คือวันที่ 7/4/1996 ท่านจะเขียนคิวรีได้ง่ายๆ ดังภาพ

คิวรีหารายการหนังสือที่ขายออกไปในวันเดียวกันกับวันแรกที่สั่งมาเก็บในสต็อกโดยใช้ค่าตายตัว

คิวรีที่เห็นในภาพบนใช้ฐานข้อมูล Northwind (ภาคผนวก จ 3) คิวรีนี้จอยสองตารางคือตาราง Orders ซึ่งเป็นตารางหลัก (คือ Head หรือ Master) ข้อมูลหนึ่งแถวคือการสั่งซื้อหนึ่งครั้ง และตาราง Order Details ซึ่งเป็นตารางลูก (คือ child หรือ detailed) เก็บรายละเอียดว่าการสั่งซื้อแต่ละครั้งประกอบด้วยหนังสืออะไรบ้าง

คิวรีนี้มีประโยชน์น้อย เพราะวันแรกที่สั่งหนังสือมาเก็บในสต็อกเป็นค่าตายตัวคือวันที่ 7/4/1996 ดังนั้นหากท่านล้างฐานข้อมูล (ย้ายข้อมูลไปเก็บใน Achieve หรือฐานข้อมูลที่เป็นคลังข้อมูล) วันแรกที่สั่งหนังสือมาเก็บในสต็อกจะเปลี่ยนไป คิวรีนี้จะให้ผลลัพธ์ที่ผิดทันที สิ่งที่ท่านต้องปรับปรุงคือแทนที่วันที่ 7/4/1996 ด้วยค่าจาก Σ นั่นคือท่านควรเขียน Σ เพื่อหาวันแรกที่สั่งหนังสือมาเก็บในสต็อกดังนี้

SELECT MIN(OrderDate) FROM Orders

คิวรีที่เห็นข้างบนใช้ฟังก์ชัน MIN เป็นฟังก์ชันแบบแอกริเกตเพื่อหาค่าน้อยที่สุด (ดูรายละเอียดฟังก์ชันแบบแอกริเกตของ T-SQL ในบทที่ 30) ท่านนำฟังก์ชันนี้มาหาวันสั่งซื้อที่มีค่าน้อยที่สุดจากในคอลัมน์ OrderDate ซึ่งเป็นคอลัมน์ที่มีชนิดข้อมูลวันที่ในตาราง Orders เมื่อนำคิวรีใหม่นี้มาซ้อนกับคิวรีเก่า ท่านจะได้โค้ดดังภาพนี้

เมื่อนำคิวรีใหม่ซ้อนกับคิวรีเก่าจะได้โค้ดดังนี้

ข้อควรระวังคือการเชื่อม Σ กับ λ ท่านใช้เครื่องหมายเท่ากับ ( = ) ซึ่งบอกเป็นนัยว่าสิ่งที่อยู่ทางทางซ้ายของเครื่องหมายเท่ากับ (o.OrderDate) และสิ่งที่อยู่ทางทางขวาของเครื่องหมายเท่ากับ ( Σ ) จะต้องเป็นสเกลาร์ (scalar ค่าเดี่ยว) ดังนั้นหาก Σ คืนค่ามาไม่เป็นสเกลาร์คิวรีนี้จะเออเรอร์ทันที ในตัวอย่างนี้ท่านมั่นใจได้ว่า Σ คืนค่ามาเป็นสเกลาร์เพราะเป็นการหาค่าแอกริเกต แต่ถ้าท่านเขียน Σ ที่ไม่ใช่แอกริเกต ท่านต้องตรวจสอบให้ดีว่า Σ คืนค่าเป็นสเกลาร์จริงหรือไม่

โฆษณา

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: