การใช้ฟังก์ชันการรวม SQL ฟังก์ชันรวมในภาษา SQL

ส่วนย่อยต่อไปนี้จะอธิบายส่วนคำสั่ง SELECT อื่นๆ ที่สามารถใช้ในคิวรีได้ เช่นเดียวกับฟังก์ชันการรวมและชุดคำสั่ง โปรดทราบว่า ณ จุดนี้ เราได้ดูการใช้ส่วนคำสั่ง WHERE แล้ว และในบทความนี้ เราจะดูส่วนคำสั่ง GROUP BY, ORDER BY และ HAVING และให้ตัวอย่างบางส่วนของการใช้ส่วนคำสั่งเหล่านี้ร่วมกับผลรวม ฟังก์ชั่นที่รองรับใน Transact-SQL

จัดกลุ่มตามข้อ

เสนอ จัดกลุ่มตามจัดกลุ่มชุดแถวที่เลือกเพื่อสร้างชุดแถวสรุปตามค่าของคอลัมน์หรือนิพจน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไป กรณีง่ายๆ ของการใช้ GROUP BY clause จะแสดงอยู่ในตัวอย่างด้านล่าง:

ใช้ SampleDb; เลือกงานจาก Works_On GROUP BY Job;

ตัวอย่างนี้เลือกและจัดกลุ่มตำแหน่งพนักงาน

ในตัวอย่างข้างต้น ส่วนคำสั่ง GROUP BY จะสร้างกลุ่มแยกต่างหากสำหรับค่าที่เป็นไปได้ทั้งหมด (รวมถึงค่า NULL) สำหรับคอลัมน์งาน

การใช้คอลัมน์ในส่วนคำสั่ง GROUP BY ต้องเป็นไปตามเงื่อนไขบางประการ โดยเฉพาะอย่างยิ่ง แต่ละคอลัมน์ในรายการที่เลือกของแบบสอบถามจะต้องปรากฏในส่วนคำสั่ง GROUP BY ด้วย ข้อกำหนดนี้ใช้ไม่ได้กับค่าคงที่และคอลัมน์ที่เป็นส่วนหนึ่งของฟังก์ชันการรวม (ฟังก์ชันการรวมจะกล่าวถึงในส่วนย่อยถัดไป) ซึ่งสมเหตุสมผลเพราะว่า เฉพาะคอลัมน์ในส่วนคำสั่ง GROUP BY เท่านั้นที่จะรับประกันว่าจะมีหนึ่งค่าต่อกลุ่ม

คุณสามารถจัดกลุ่มตารางตามคอลัมน์ต่างๆ รวมกันได้ ตัวอย่างด้านล่างสาธิตการจัดกลุ่มแถวของตาราง Works_on ออกเป็นสองคอลัมน์:

ใช้ SampleDb; เลือก ProjectNumber งานจาก Works_On GROUP BY ProjectNumber งาน;

ผลลัพธ์ของแบบสอบถามนี้:

จากผลการสืบค้น คุณจะเห็นว่ามีเก้ากลุ่มที่มีหมายเลขโครงการและตำแหน่งรวมกันต่างกัน ลำดับของชื่อคอลัมน์ในส่วนคำสั่ง GROUP BY ไม่จำเป็นต้องเหมือนกับในรายการคอลัมน์ใน SELECT

ฟังก์ชันรวม

ฟังก์ชันรวมจะใช้เพื่อให้ได้ค่ารวม ฟังก์ชันรวมทั้งหมดสามารถแบ่งออกเป็นประเภทต่างๆ ได้ดังต่อไปนี้:

    ฟังก์ชันรวมสามัญ

    ฟังก์ชันการรวมทางสถิติ

    ฟังก์ชันรวมที่ผู้ใช้กำหนด

    ฟังก์ชันรวมเชิงวิเคราะห์

ที่นี่เราจะดูฟังก์ชันรวมสามประเภทแรก

ฟังก์ชันการรวมทั่วไป

Transact-SQL รองรับฟังก์ชันรวมหกฟังก์ชันต่อไปนี้: นาที, สูงสุด, ผลรวม, เฉลี่ย, นับ, COUNT_BIG.

ฟังก์ชันการรวมทั้งหมดจะทำการคำนวณในอาร์กิวเมนต์เดียว ซึ่งสามารถเป็นได้ทั้งคอลัมน์หรือนิพจน์ (ข้อยกเว้นเดียวคือรูปแบบที่สองของทั้งสองฟังก์ชัน: COUNT และ COUNT_BIG คือ COUNT(*) และ COUNT_BIG(*) ตามลำดับ) ผลลัพธ์ของการคำนวณฟังก์ชันรวมใดๆ จะเป็นค่าคงที่ ซึ่งแสดงในคอลัมน์ผลลัพธ์ที่แยกจากกัน

ฟังก์ชันการรวมจะถูกระบุไว้ในรายการคอลัมน์ของคำสั่ง SELECT ซึ่งอาจมี GROUP BY clause ด้วย หากไม่มีส่วนคำสั่ง GROUP BY ในคำสั่ง SELECT และรายการคอลัมน์ที่เลือกมีฟังก์ชันการรวมอย่างน้อยหนึ่งฟังก์ชัน จะต้องไม่มีคอลัมน์ธรรมดา (ยกเว้นคอลัมน์ที่ทำหน้าที่เป็นอาร์กิวเมนต์ของฟังก์ชันการรวม) ดังนั้นโค้ดในตัวอย่างด้านล่างจึงไม่ถูกต้อง:

ใช้ SampleDb; เลือกนามสกุล, MIN (Id) จากพนักงาน;

ในที่นี้ คอลัมน์นามสกุลของตารางพนักงานไม่ควรอยู่ในรายการเลือกคอลัมน์ เนื่องจากไม่ใช่อาร์กิวเมนต์ของฟังก์ชันรวม ในทางกลับกัน รายการเลือกคอลัมน์สามารถมีชื่อคอลัมน์ที่ไม่ใช่อาร์กิวเมนต์ของฟังก์ชันการรวมได้ ถ้าคอลัมน์เหล่านั้นเป็นอาร์กิวเมนต์ของ GROUP BY clause

อาร์กิวเมนต์ฟังก์ชันรวมสามารถนำหน้าด้วยคำหลักที่เป็นไปได้คำใดคำหนึ่งจากสองคำ:

ทั้งหมด

ระบุว่าดำเนินการคำนวณกับค่าทั้งหมดในคอลัมน์ นี่คือค่าเริ่มต้น

แตกต่าง

ระบุว่าจะใช้เฉพาะค่าคอลัมน์ที่ไม่ซ้ำกันในการคำนวณ

ฟังก์ชันรวม MIN และ MAX

ฟังก์ชันการรวม MIN และ MAX จะคำนวณค่าที่เล็กที่สุดและใหญ่ที่สุดของคอลัมน์ตามลำดับ หากแบบสอบถามมีส่วนคำสั่ง WHERE ฟังก์ชัน MIN และ MAX จะส่งกลับค่าที่เล็กที่สุดและใหญ่ที่สุดของแถวที่ตรงกับเงื่อนไขที่ระบุ ตัวอย่างด้านล่างแสดงการใช้ฟังก์ชันรวม MIN:

ใช้ SampleDb; -- ส่งกลับ 2581 SELECT MIN(Id) AS "Minimum Id value" จากพนักงาน

ผลลัพธ์ที่ส่งคืนในตัวอย่างข้างต้นไม่มีข้อมูลมากนัก ตัวอย่างเช่น ไม่ทราบนามสกุลของพนักงานที่เป็นเจ้าของหมายเลขนี้ แต่เป็นไปไม่ได้ที่จะรับนามสกุลนี้ด้วยวิธีปกติ เนื่องจากดังที่กล่าวไว้ข้างต้น คุณไม่ได้รับอนุญาตให้ระบุคอลัมน์นามสกุลอย่างชัดเจน เพื่อให้ได้นามสกุลของพนักงานรายนี้พร้อมกับจำนวนบุคลากรต่ำสุดของพนักงาน แบบสอบถามย่อยจึงถูกนำมาใช้ ตัวอย่างด้านล่างแสดงการใช้แบบสอบถามย่อยดังกล่าว โดยที่แบบสอบถามย่อยมีคำสั่ง SELECT จากตัวอย่างก่อนหน้านี้:

ผลลัพธ์ของการร้องขอ:

การใช้ฟังก์ชันรวม MAX แสดงในตัวอย่างด้านล่าง:

ฟังก์ชัน MIN และ MAX ยังสามารถยอมรับสตริงและวันที่เป็นอาร์กิวเมนต์ได้ ในกรณีของอาร์กิวเมนต์สตริง ค่าจะถูกเปรียบเทียบโดยใช้ลำดับการจัดเรียงจริง สำหรับอาร์กิวเมนต์ข้อมูลประเภท "วันที่" ตลอดเวลา ค่าคอลัมน์ที่น้อยที่สุดคือวันที่แรกสุด และค่าคอลัมน์ที่ใหญ่ที่สุดคือค่าล่าสุด

คุณสามารถใช้คำสำคัญ DISTINCT กับฟังก์ชัน MIN และ MAX ได้ ก่อนที่จะใช้ฟังก์ชันการรวม MIN และ MAX ค่า NULL ทั้งหมดจะถูกตัดออกจากคอลัมน์อาร์กิวเมนต์

ฟังก์ชันรวม SUM

รวม ฟังก์ชันผลรวมคำนวณผลรวมของค่าของคอลัมน์ อาร์กิวเมนต์ของฟังก์ชันรวมนี้ต้องเป็นชนิดข้อมูลตัวเลขเสมอ การใช้ฟังก์ชันการรวม SUM แสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; เลือก SUM (งบประมาณ) "งบประมาณทั้งหมด" จากโครงการ

ตัวอย่างนี้จะคำนวณจำนวนงบประมาณทั้งหมดสำหรับโครงการทั้งหมด ผลลัพธ์ของการร้องขอ:

ในตัวอย่างนี้ ฟังก์ชันรวมจะจัดกลุ่มมูลค่างบประมาณโครงการทั้งหมดและกำหนดจำนวนเงินทั้งหมด ด้วยเหตุนี้ คิวรีจึงมีฟังก์ชันการจัดกลุ่มโดยนัย (เช่นเดียวกับคิวรีที่คล้ายกันทั้งหมด) ฟังก์ชันการจัดกลุ่มโดยนัยจากตัวอย่างด้านบนสามารถระบุได้อย่างชัดเจน ดังที่แสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; เลือก SUM (งบประมาณ) "งบประมาณทั้งหมด" จากกลุ่มโครงการ BY();

การใช้พารามิเตอร์ DISTINCT จะกำจัดค่าที่ซ้ำกันทั้งหมดในคอลัมน์ก่อนที่จะใช้ฟังก์ชัน SUM ในทำนองเดียวกัน ค่า NULL ทั้งหมดจะถูกลบออกก่อนที่จะใช้ฟังก์ชันการรวมนี้

ฟังก์ชันรวม AVG

รวม ฟังก์ชัน AVGส่งกลับค่าเฉลี่ยเลขคณิตของค่าทั้งหมดในคอลัมน์ อาร์กิวเมนต์ของฟังก์ชันรวมนี้ต้องเป็นชนิดข้อมูลตัวเลขเสมอ ก่อนที่จะใช้ฟังก์ชัน AVG ค่า NULL ทั้งหมดจะถูกลบออกจากอาร์กิวเมนต์

การใช้ฟังก์ชันรวม AVG แสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; -- ส่งกลับ 133833 SELECT AVG (งบประมาณ) "งบประมาณเฉลี่ยสำหรับโครงการ" จากโครงการ

ที่นี่คำนวณค่าเฉลี่ยเลขคณิตของมูลค่างบประมาณสำหรับงบประมาณทั้งหมด

ฟังก์ชันรวม COUNT และ COUNT_BIG

รวม ฟังก์ชันนับมีสองรูปแบบที่แตกต่างกัน:

นับ(col_name) นับ(*)

รูปแบบแรกของฟังก์ชันจะนับจำนวนค่าในคอลัมน์ col_name หากแบบสอบถามใช้คีย์เวิร์ด DISTINCT ค่าที่ซ้ำกันทั้งหมดในคอลัมน์จะถูกลบออกก่อนที่จะใช้ฟังก์ชัน COUNT ฟังก์ชัน COUNT รูปแบบนี้ไม่ได้คำนึงถึงค่า NULL เมื่อนับจำนวนค่าในคอลัมน์

การใช้รูปแบบแรกของฟังก์ชันรวม COUNT ดังแสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; เลือก ProjectNumber, COUNT (งาน DISTINCT) "ทำงานในโครงการ" จาก Works_on GROUP BY ProjectNumber;

ที่นี่จะนับจำนวนตำแหน่งที่แตกต่างกันสำหรับแต่ละโครงการ ผลลัพธ์ของแบบสอบถามนี้:

ดังที่คุณเห็นจากแบบสอบถามตัวอย่าง ฟังก์ชัน COUNT ไม่ได้คำนึงถึงค่า NULL (ผลรวมของค่าทั้งหมดในคอลัมน์ตำแหน่งกลายเป็น 7 ไม่ใช่ 11 อย่างที่ควรจะเป็น)

รูปแบบที่สองของฟังก์ชัน COUNT ได้แก่ ฟังก์ชัน COUNT(*) นับจำนวนแถวในตาราง และถ้าคำสั่ง SELECT ของแบบสอบถามที่มีฟังก์ชัน COUNT(*) มีส่วนคำสั่ง WHERE ที่มีเงื่อนไข ฟังก์ชันจะส่งกลับจำนวนแถวที่ตรงตามเงื่อนไขที่ระบุ ต่างจากฟังก์ชัน COUNT เวอร์ชันแรก รูปแบบที่สองจะไม่ละเว้นค่า NULL เนื่องจากฟังก์ชันนี้ทำงานบนแถว ไม่ใช่คอลัมน์ ตัวอย่างด้านล่างสาธิตการใช้ฟังก์ชัน COUNT(*):

ใช้ SampleDb; เลือกงานเป็น "ประเภทของงาน", COUNT (*) "ต้องการคนงาน" จาก Works_on GROUP BY Job;

ที่นี่จะคำนวณจำนวนตำแหน่งในโครงการทั้งหมด ผลลัพธ์ของการร้องขอ:

ฟังก์ชัน COUNT_BIGคล้ายกับฟังก์ชัน COUNT ข้อแตกต่างเพียงอย่างเดียวคือประเภทของผลลัพธ์ที่ส่งคืน: ฟังก์ชัน COUNT_BIG ส่งคืนค่า BIGINT เสมอ ในขณะที่ฟังก์ชัน COUNT ส่งคืนค่าข้อมูล INTEGER

ฟังก์ชันการรวมทางสถิติ

ฟังก์ชันต่อไปนี้ประกอบขึ้นเป็นกลุ่มของฟังก์ชันการรวมทางสถิติ:

วีเออาร์

คำนวณความแปรปรวนทางสถิติของค่าทั้งหมดที่แสดงในคอลัมน์หรือนิพจน์

วาร์ป

คำนวณความแปรปรวนทางสถิติของประชากรของค่าทั้งหมดที่แสดงในคอลัมน์หรือนิพจน์

STDEV

คำนวณค่าเบี่ยงเบนมาตรฐาน (ซึ่งคำนวณเป็นรากที่สองของความแปรปรวนที่สอดคล้องกัน) ของค่าทั้งหมดในคอลัมน์หรือนิพจน์

สธ.เดฟ

คำนวณค่าเบี่ยงเบนมาตรฐานของประชากรของค่าทั้งหมดในคอลัมน์หรือนิพจน์

ฟังก์ชันรวมที่ผู้ใช้กำหนด

โปรแกรมฐานข้อมูลยังรองรับการใช้งานฟังก์ชั่นที่ผู้ใช้กำหนด ความสามารถนี้ช่วยให้ผู้ใช้สามารถเพิ่มฟังก์ชันการรวมระบบด้วยฟังก์ชันที่พวกเขาสามารถนำไปใช้และติดตั้งได้เอง ฟังก์ชันเหล่านี้แสดงถึงคลาสพิเศษของฟังก์ชันที่ผู้ใช้กำหนด และจะกล่าวถึงรายละเอียดในภายหลัง

มีข้อเสนอ

ในประโยค มีกำหนดเงื่อนไขที่ใช้กับกลุ่มของแถว ดังนั้นส่วนคำสั่งนี้จึงมีความหมายเหมือนกันสำหรับกลุ่มของแถว เช่นเดียวกับส่วนคำสั่ง WHERE สำหรับเนื้อหาของตารางที่เกี่ยวข้อง ไวยากรณ์ของประโยค HAVING คือ:

มีสภาพ

ในที่นี้พารามิเตอร์เงื่อนไขแสดงถึงเงื่อนไขและมีฟังก์ชันรวมหรือค่าคงที่

การใช้คำสั่งย่อย HAVING ร่วมกับฟังก์ชันการรวม COUNT(*) แสดงไว้ในตัวอย่างด้านล่าง:

ใช้ SampleDb; -- ส่งกลับ "p3" SELECT ProjectNumber จาก Works_on GROUP BY ProjectNumber HAVING COUNT(*)

ในตัวอย่างนี้ ระบบจะจัดกลุ่มแถวทั้งหมดตามค่าของคอลัมน์ ProjectNumber โดยใช้ GROUP BY clause หลังจากนั้น ระบบจะนับจำนวนแถวในแต่ละกลุ่มและเลือกกลุ่มที่มีน้อยกว่าสี่แถว (สามหรือน้อยกว่า)

นอกจากนี้ HAVING clause ยังสามารถใช้ได้โดยไม่ต้องมีฟังก์ชันรวม ดังที่แสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; -- ส่งคืน "ที่ปรึกษา" เลือกงานจาก Works_on GROUP BY งานที่มีงาน LIKE "K%";

ตัวอย่างนี้จัดกลุ่มแถวของตาราง Works_on ตามตำแหน่งงาน และกำจัดงานที่ไม่ได้ขึ้นต้นด้วยตัวอักษร "K"

HAVING clause ยังสามารถใช้ได้โดยไม่มี GROUP BY clause แม้ว่าจะไม่ใช่วิธีปฏิบัติทั่วไปก็ตาม ในกรณีนี้ แถวทั้งหมดของตารางจะถูกส่งกลับในกลุ่มเดียว

เรียงตามข้อ

เสนอ สั่งซื้อโดยกำหนดลำดับการจัดเรียงของแถวในชุดผลลัพธ์ที่ส่งคืนโดยแบบสอบถาม ประโยคนี้มีไวยากรณ์ดังต่อไปนี้:

ลำดับการจัดเรียงระบุไว้ในพารามิเตอร์ col_name พารามิเตอร์ col_number เป็นตัวบ่งชี้ลำดับการจัดเรียงทางเลือกที่ระบุคอลัมน์ตามลำดับที่ปรากฏในรายการที่เลือกของคำสั่ง SELECT (1 คือคอลัมน์แรก, 2 คือคอลัมน์ที่สอง ฯลฯ) พารามิเตอร์ ASCระบุการเรียงลำดับจากน้อยไปหามาก และ พารามิเตอร์ DESC- ในทิศทางลง ค่าเริ่มต้นคือ ASC

ชื่อคอลัมน์ในส่วนคำสั่ง ORDER BY ไม่จำเป็นต้องอยู่ในรายการคอลัมน์ที่เลือก แต่สิ่งนี้ใช้ไม่ได้กับแบบสอบถามเช่น SELECT DISTINCT เนื่องจาก ในเคียวรีดังกล่าว ชื่อคอลัมน์ที่ระบุในส่วนคำสั่ง ORDER BY จะต้องถูกระบุในรายการคอลัมน์ที่เลือกด้วย นอกจากนี้ ส่วนคำสั่งนี้ไม่สามารถมีชื่อคอลัมน์จากตารางที่ไม่ได้ระบุไว้ในส่วนคำสั่ง FROM

ดังที่คุณเห็นจากไวยากรณ์ของคำสั่งย่อย ORDER BY ชุดผลลัพธ์สามารถจัดเรียงตามหลายคอลัมน์ได้ การเรียงลำดับนี้แสดงอยู่ในตัวอย่างด้านล่าง:

ในตัวอย่างนี้ หมายเลขแผนกและชื่อพนักงานจะถูกเลือกสำหรับพนักงานที่มีจำนวนบุคลากรน้อยกว่า 20,000 คน และเรียงลำดับตามนามสกุลและชื่อ ผลลัพธ์ของแบบสอบถามนี้:

คอลัมน์ในส่วนคำสั่ง ORDER BY ไม่สามารถระบุได้โดยใช้ชื่อ แต่เรียงตามลำดับในรายการที่เลือก ดังนั้น ประโยคในตัวอย่างข้างต้นจึงสามารถเขียนใหม่ได้ดังนี้

วิธีอื่นในการระบุคอลัมน์ตามตำแหน่งแทนการใช้ชื่อจะใช้หากเกณฑ์การเรียงลำดับมีฟังก์ชันการรวม (อีกวิธีหนึ่งคือการใช้ชื่อคอลัมน์ ซึ่งจะปรากฏในส่วนคำสั่ง ORDER BY) อย่างไรก็ตาม ในส่วนคำสั่ง ORDER BY ขอแนะนำให้คุณระบุคอลัมน์ด้วยชื่อแทนที่จะระบุด้วยตัวเลข เพื่อให้ง่ายต่อการอัปเดตแบบสอบถาม หากจำเป็นต้องเพิ่มหรือลบคอลัมน์ออกจากรายการที่เลือก การระบุคอลัมน์ในส่วนคำสั่ง ORDER BY ตามตัวเลขจะแสดงอยู่ในตัวอย่างด้านล่าง:

ใช้ SampleDb; เลือก ProjectNumber, COUNT(*) "จำนวนพนักงาน" จาก Works_on GROUP BY ProjectNumber ORDER BY 2 DESC;

ที่นี่ สำหรับแต่ละโครงการ จะมีการเลือกหมายเลขโครงการและจำนวนพนักงานที่เข้าร่วม โดยจัดเรียงผลลัพธ์จากมากไปน้อยตามจำนวนพนักงาน

Transact-SQL จะวางค่า NULL ไว้ที่จุดเริ่มต้นของรายการเมื่อเรียงลำดับจากน้อยไปหามาก และที่ส่วนท้ายของรายการเมื่อเรียงลำดับจากมากไปน้อย

การใช้คำสั่งย่อย ORDER BY เพื่อแบ่งหน้าผลลัพธ์

การแสดงผลลัพธ์การสืบค้นบนเพจปัจจุบันสามารถนำไปใช้ในแอปพลิเคชันผู้ใช้ หรือคุณสามารถสั่งให้เซิร์ฟเวอร์ฐานข้อมูลดำเนินการนี้ได้ ในกรณีแรก แถวฐานข้อมูลทั้งหมดจะถูกส่งไปยังแอปพลิเคชัน ซึ่งมีหน้าที่เลือกแถวที่ต้องการและแสดงแถวเหล่านั้น ในกรณีที่สอง ทางฝั่งเซิร์ฟเวอร์ จะมีการเลือกและแสดงเฉพาะแถวที่จำเป็นสำหรับเพจปัจจุบันเท่านั้น อย่างที่คุณคาดหวัง การสร้างเพจบนฝั่งเซิร์ฟเวอร์มักจะให้ประสิทธิภาพที่ดีกว่าเพราะ... เฉพาะบรรทัดที่จำเป็นสำหรับการแสดงผลเท่านั้นที่จะถูกส่งไปยังไคลเอนต์

เพื่อรองรับการสร้างเพจฝั่งเซิร์ฟเวอร์ SQL Server 2012 ขอแนะนำส่วนคำสั่ง SELECT ใหม่สองส่วน: OFFSET และ FETCH การประยุกต์ใช้สองประโยคนี้แสดงไว้ในตัวอย่างด้านล่าง จากฐานข้อมูล AdventureWorks2012 (ซึ่งคุณสามารถค้นหาได้ในแหล่งที่มา) รหัสธุรกิจ ตำแหน่งงาน และวันเกิดของพนักงานหญิงทุกคนจะถูกดึงข้อมูล โดยเรียงลำดับผลลัพธ์ตามตำแหน่งงานจากน้อยไปหามาก ชุดผลลัพธ์ของแถวจะถูกแบ่งออกเป็นหน้า 10 บรรทัด และหน้าที่ 3 จะปรากฏขึ้น:

ในประโยค ชดเชยระบุจำนวนบรรทัดผลลัพธ์ที่จะข้ามไปในผลลัพธ์ที่แสดง ตัวเลขนี้คำนวณหลังจากการเรียงลำดับแถวโดยใช้คำสั่งย่อย ORDER BY ในประโยค ดึงข้อมูลถัดไประบุจำนวนแถวที่ตรงตามเงื่อนไข WHERE และจัดเรียงเพื่อส่งคืน พารามิเตอร์ของส่วนคำสั่งนี้อาจเป็นค่าคงที่ นิพจน์ หรือผลลัพธ์ของคิวรีอื่น ส่วนคำสั่ง FETCH NEXT นั้นคล้ายคลึงกับ ดึงข้อมูลก่อน.

เป้าหมายหลักเมื่อสร้างเพจฝั่งเซิร์ฟเวอร์คือเพื่อให้สามารถใช้ฟอร์มเพจทั่วไปโดยใช้ตัวแปรได้ งานนี้สามารถทำได้โดยใช้แพ็คเกจ SQL Server

คำสั่ง SELECT และคุณสมบัติ IDENTITY

คุณสมบัติประจำตัวช่วยให้คุณสามารถกำหนดค่าสำหรับคอลัมน์ตารางเฉพาะในรูปแบบของตัวนับที่เพิ่มขึ้นโดยอัตโนมัติ คอลัมน์ชนิดข้อมูลตัวเลข เช่น TINYINT, SMALLINT, INT และ BIGINT สามารถมีคุณสมบัตินี้ได้ สำหรับคอลัมน์ตารางดังกล่าว Database Engine จะสร้างค่าตามลำดับโดยอัตโนมัติโดยเริ่มจากค่าเริ่มต้นที่ระบุ ดังนั้นคุณสมบัติ IDENTITY สามารถใช้สร้างค่าตัวเลขหลักเดียวสำหรับคอลัมน์ที่เลือกได้

ตารางสามารถมีได้เพียงหนึ่งคอลัมน์ที่มีคุณสมบัติ IDENTITY เจ้าของตารางมีตัวเลือกในการระบุค่าเริ่มต้นและส่วนเพิ่ม ดังที่แสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; สร้างตารางผลิตภัณฑ์ (Id INT IDENTITY(10000, 1) NOT NULL, Name NVARCHAR(30) NOT NULL, Price MONEY) INSERT INTO Product(Name, Price) VALUES ("Product1", 10), ("Product2", 15) , ("ผลิตภัณฑ์ 3", 8), ("ผลิตภัณฑ์ 4", 15), ("ผลิตภัณฑ์ 5", 40); -- ส่งคืน 10,004 SELECT IDENTITYCOL จากผลิตภัณฑ์ โดยที่ Name = "Product5"; -- คล้ายกับคำสั่งก่อนหน้า SELECT $identity FROM Product WHERE Name = "Product5";

ตัวอย่างนี้จะสร้างตารางผลิตภัณฑ์ที่มีคอลัมน์ Id ที่มีคุณสมบัติ IDENTITY ก่อน ค่าในคอลัมน์ Id จะถูกสร้างขึ้นโดยอัตโนมัติโดยระบบ เริ่มต้นที่ 10,000 และเพิ่มขึ้นทีละหน่วยสำหรับแต่ละค่าที่ตามมา: 10,000, 10,001, 10,002 เป็นต้น

ฟังก์ชันและตัวแปรของระบบหลายอย่างเชื่อมโยงกับคุณสมบัติ IDENTITY เช่น ใช้โค้ดตัวอย่าง ตัวแปรระบบ $identity- ดังที่คุณเห็นจากผลลัพธ์ของโค้ดนี้ ตัวแปรนี้จะอ้างอิงคุณสมบัติ IDENTITY โดยอัตโนมัติ คุณยังสามารถใช้ฟังก์ชันระบบแทนได้ เอกลักษณ์COL.

ค่าเริ่มต้นและการเพิ่มขึ้นของคอลัมน์ที่มีคุณสมบัติ IDENTITY สามารถพบได้โดยใช้ฟังก์ชัน IDENT_SEEDและ IDENT_INCRตามลำดับ ฟังก์ชั่นเหล่านี้ถูกใช้ดังนี้:

ใช้ SampleDb; เลือก IDENT_SEED("ผลิตภัณฑ์"), IDENT_INCR("ผลิตภัณฑ์")

ดังที่ได้กล่าวไปแล้ว ค่า IDENTITY จะถูกตั้งค่าโดยอัตโนมัติโดยระบบ แต่ผู้ใช้สามารถระบุค่าของตนสำหรับบางแถวได้อย่างชัดเจนโดยการกำหนดพารามิเตอร์ IDENTITY_INSERTค่า ON ก่อนที่จะแทรกค่าที่ชัดเจน:

SET IDENTITY INSERT ชื่อตารางเปิดอยู่

เนื่องจากคุณสามารถใช้พารามิเตอร์ IDENTITY_INSERT เพื่อตั้งค่าคอลัมน์ที่มีคุณสมบัติ IDENTITY ให้เป็นค่าใดๆ รวมถึงค่าที่ซ้ำกัน โดยทั่วไปคุณสมบัติ IDENTITY จะไม่บังคับใช้ค่าเฉพาะของค่าของคอลัมน์ ดังนั้น เพื่อบังคับใช้ค่าคอลัมน์ที่ไม่ซ้ำกัน คุณควรใช้ข้อจำกัด UNIQUE หรือ PRIMARY KEY

เมื่อคุณแทรกค่าลงในตารางหลังจากตั้งค่า IDENTITY_INSERT เป็นเปิด ระบบจะสร้างค่าถัดไปของคอลัมน์ IDENTITY โดยการเพิ่มค่าปัจจุบันที่ใหญ่ที่สุดของคอลัมน์นั้น

สร้างคำสั่งลำดับ

มีข้อเสียที่สำคัญหลายประการในการใช้คุณสมบัติ IDENTITY โดยข้อเสียที่สำคัญที่สุดมีดังต่อไปนี้:

    การประยุกต์ใช้คุณสมบัตินั้น จำกัด อยู่ที่ตารางที่ระบุ

    ไม่สามารถรับค่าคอลัมน์ใหม่ด้วยวิธีอื่นใดนอกเหนือจากการใช้มัน

    คุณสมบัติ IDENTITY สามารถระบุได้เฉพาะเมื่อสร้างคอลัมน์เท่านั้น

ด้วยเหตุผลเหล่านี้ SQL Server 2012 จึงแนะนำลำดับที่มีความหมายเหมือนกับคุณสมบัติ IDENTITY แต่ไม่มีข้อเสียที่ระบุไว้ก่อนหน้านี้ ในบริบทนี้ ลำดับคือฟังก์ชันฐานข้อมูลที่ช่วยให้คุณระบุค่าตัวนับสำหรับออบเจ็กต์ฐานข้อมูลต่างๆ เช่น คอลัมน์และตัวแปร

ลำดับถูกสร้างขึ้นโดยใช้คำแนะนำ สร้างลำดับ- คำสั่ง CREATE SEQUENCE ถูกกำหนดไว้ในมาตรฐาน SQL และได้รับการสนับสนุนโดยระบบฐานข้อมูลเชิงสัมพันธ์อื่นๆ เช่น IBM DB2 และ Oracle

ตัวอย่างด้านล่างแสดงวิธีการสร้างลำดับใน SQL Server:

ใช้ SampleDb; สร้างลำดับ dbo.Sequence1 เมื่อ INT เริ่มต้นด้วย 1 เพิ่มขึ้น 5 นาที 1 ค่าสูงสุด 256 CYCLE;

ในตัวอย่างข้างต้น ค่าของ Sequence1 จะถูกสร้างขึ้นโดยอัตโนมัติโดยระบบ โดยเริ่มจากค่า 1 และเพิ่มทีละ 5 สำหรับแต่ละค่าที่ตามมา ดังนั้นใน เริ่มข้อเสนอระบุค่าเริ่มต้นและเข้า ข้อเสนอที่เพิ่มขึ้น- ขั้นตอน (ขั้นตอนอาจเป็นค่าบวกหรือค่าลบก็ได้)

ในสองประโยคตัวเลือกถัดไป มินแวลและ MAXVALUEมีระบุค่าต่ำสุดและสูงสุดของวัตถุลำดับ (โปรดทราบว่าค่า MINVALUE ต้องน้อยกว่าหรือเท่ากับค่าเริ่มต้น และค่า MAXVALUE ต้องไม่มากกว่าขีดจำกัดบนของชนิดข้อมูลที่ระบุสำหรับลำดับ) ในส่วนคำสั่ง วงจรบ่งชี้ว่าลำดับถูกทำซ้ำตั้งแต่จุดเริ่มต้นเมื่อเกินค่าสูงสุด (หรือต่ำสุดสำหรับลำดับที่มีขั้นตอนที่เป็นลบ) ตามค่าเริ่มต้น ส่วนคำสั่งนี้จะถูกตั้งค่าเป็น NO CYCLE ซึ่งหมายความว่าการเกินค่าสูงสุดหรือต่ำสุดของลำดับจะทำให้เกิดข้อยกเว้น

คุณสมบัติหลักของลำดับคือความเป็นอิสระจากตาราง เช่น สามารถใช้ได้กับวัตถุฐานข้อมูลใดๆ เช่น คอลัมน์ตารางหรือตัวแปร (คุณสมบัตินี้มีผลเชิงบวกต่อการจัดเก็บและประสิทธิภาพการทำงาน ไม่จำเป็นต้องจัดเก็บลำดับเฉพาะ แต่จะจัดเก็บเฉพาะค่าสุดท้ายเท่านั้น)

สร้างค่าลำดับใหม่โดยใช้ ค่าถัดไปสำหรับนิพจน์แอปพลิเคชันดังแสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; -- ส่งคืน 1 SELECT NEXT VALUE สำหรับ dbo.sequence1; -- ส่งกลับ 6 (ขั้นตอนถัดไป) เลือกค่าถัดไปสำหรับ dbo.sequence1;

คุณสามารถใช้นิพจน์ NEXT VALUE FOR เพื่อกำหนดผลลัพธ์ของลำดับให้กับตัวแปรหรือเซลล์คอลัมน์ได้ ตัวอย่างด้านล่างแสดงวิธีใช้นิพจน์นี้เพื่อกำหนดผลลัพธ์ให้กับคอลัมน์:

ใช้ SampleDb; สร้างผลิตภัณฑ์ตาราง (รหัส INT ไม่เป็นโมฆะ ชื่อ NVARCHAR (30) ไม่เป็นโมฆะ ราคาเป็นเงิน) แทรกลงในค่าผลิตภัณฑ์ (ค่าถัดไปสำหรับ dbo.sequence1, "Product1", 10) แทรกลงในมูลค่าผลิตภัณฑ์ (ค่าถัดไปสำหรับ dbo.sequence1, "Product2", 15); -

ในตัวอย่างข้างต้น ขั้นแรกเราจะสร้างตารางผลิตภัณฑ์ซึ่งประกอบด้วยสี่คอลัมน์ ถัดไป สองคำสั่ง INSERT จะแทรกสองแถวลงในตารางนี้ สองเซลล์แรกของคอลัมน์แรกจะมีค่า 11 และ 16

ตัวอย่างด้านล่างแสดงการใช้มุมมองไดเรกทอรี sys.ลำดับวิธีดูค่าปัจจุบันของลำดับโดยไม่ใช้:

โดยทั่วไปแล้ว คำสั่ง NEXT VALUE FOR จะถูกใช้ในคำสั่ง INSERT เพื่อทำให้ระบบแทรกค่าที่สร้างขึ้น นิพจน์นี้ยังสามารถใช้เป็นส่วนหนึ่งของแบบสอบถามแบบหลายบรรทัดโดยใช้ส่วนคำสั่ง OVER

หากต้องการเปลี่ยนคุณสมบัติของลำดับที่มีอยู่ ให้ใช้ คำสั่ง ALTER SEQUENCE- การใช้ที่สำคัญที่สุดประการหนึ่งของคำสั่งนี้คือการใช้ตัวเลือก RESTART WITH ซึ่งจะรีเซ็ตลำดับที่ระบุ ตัวอย่างด้านล่างแสดงการใช้ ALTER SEQUENCE เพื่อรีเซ็ตคุณสมบัติเกือบทั้งหมดของ Sequence1:

ใช้ SampleDb; แก้ไขลำดับ dbo.sequence1 รีสตาร์ทโดยเพิ่ม 100 ครั้งละ 50 ค่าขั้นต่ำ 50 ค่าสูงสุด 200 ไม่มีวงจร

การลบลำดับโดยใช้คำสั่ง วางลำดับ.

ตั้งค่าตัวดำเนินการ

นอกเหนือจากตัวดำเนินการที่กล่าวถึงก่อนหน้านี้แล้ว Transact-SQL ยังรองรับตัวดำเนินการที่ตั้งค่าอีกสามตัว: UNION, INTERSECT และ EXCEPT

ตัวดำเนินการยูเนี่ยน

ตัวดำเนินการยูเนี่ยนรวมผลลัพธ์ของการสืบค้นตั้งแต่สองรายการขึ้นไปไว้ในชุดผลลัพธ์เดียวที่รวมแถวทั้งหมดที่เป็นของการสืบค้นทั้งหมดในกลุ่ม ดังนั้น ผลลัพธ์ของการรวมสองตารางจึงเป็นตารางใหม่ที่มีแถวทั้งหมดที่รวมอยู่ในตารางดั้งเดิมหรือในทั้งสองตารางนี้

รูปแบบทั่วไปของตัวดำเนินการ UNION มีลักษณะดังนี้:

select_1 ยูเนี่ยน select_2 ( select_3])...

พารามิเตอร์ select_1, select_2, ... คือคำสั่ง SELECT ที่สร้างการรวม หากใช้ตัวเลือก ALL แถวทั้งหมดจะแสดงขึ้น รวมทั้งรายการที่ซ้ำกันด้วย ในตัวดำเนินการ UNION พารามิเตอร์ ALL มีความหมายเหมือนกับในรายการการเลือก SELECT แต่มีความแตกต่างอย่างหนึ่ง: สำหรับรายการการเลือก SELECT พารามิเตอร์นี้จะถูกใช้เป็นค่าเริ่มต้น แต่สำหรับตัวดำเนินการ UNION จะต้องระบุอย่างชัดเจน

ในรูปแบบดั้งเดิม ฐานข้อมูล SampleDb ไม่เหมาะสำหรับการสาธิตการใช้ตัวดำเนินการ UNION ดังนั้น ส่วนนี้จึงสร้างตารางใหม่ EmployeeEnh ซึ่งเหมือนกับตาราง Employee ที่มีอยู่ แต่มีคอลัมน์เมืองเพิ่มเติม คอลัมน์นี้ระบุสถานที่อยู่อาศัยของพนักงาน

การสร้างตาราง EmployeeEnh ทำให้เรามีโอกาสที่ดีในการสาธิตการใช้ส่วนคำสั่ง เข้าไปข้างในในคำสั่ง SELECT คำสั่ง SELECT INTO ดำเนินการสองอย่าง ขั้นแรก จะมีการสร้างตารางใหม่โดยมีคอลัมน์ที่แสดงอยู่ในรายการ SELECT จากนั้นแถวจากตารางต้นฉบับจะถูกแทรกลงในตารางใหม่ ชื่อของตารางใหม่ถูกระบุในส่วนคำสั่ง INTO และชื่อของตารางต้นฉบับถูกระบุในส่วนคำสั่ง FROM

ตัวอย่างด้านล่างแสดงวิธีการสร้างตาราง EmployeeEnh จากตาราง Employee:

ใช้ SampleDb; SELECT * เข้าสู่ EmployeeEnh จากพนักงาน; แก้ไขตาราง EmployeeEnh เพิ่มเมือง NCHAR (40) NULL;

ในตัวอย่างนี้ คำสั่ง SELECT INTO จะสร้างตาราง EmployeeEnh แทรกแถวทั้งหมดจากตารางแหล่งที่มาของ Employee ลงไป จากนั้นคำสั่ง ALTER TABLE จะเพิ่มคอลัมน์ City ลงในตารางใหม่ แต่คอลัมน์เมืองที่เพิ่มไม่มีค่าใดๆ สามารถแทรกค่าในคอลัมน์นี้ได้โดยใช้ Management Studio หรือใช้โค้ดต่อไปนี้:

ใช้ SampleDb; อัปเดต EmployeeEnh SET City = "Kazan" โดยที่ Id = 2581; อัปเดต EmployeeEnh SET City = "มอสโก" โดยที่ Id = 9031; อัปเดต EmployeeEnh SET City = "Ekaterinburg" WHERE Id = 10102; อัปเดต EmployeeEnh SET City = "เซนต์ปีเตอร์สเบิร์ก" WHERE Id = 18316; อัปเดต EmployeeEnh SET City = "Krasnodar" โดยที่ Id = 25348; อัปเดต EmployeeEnh SET City = "Kazan" โดยที่ Id = 28559; อัปเดต EmployeeEnh SET City = "ระดับการใช้งาน" โดยที่ Id = 29346;

ตอนนี้เราพร้อมที่จะสาธิตการใช้คำสั่ง UNION แล้ว ตัวอย่างด้านล่างแสดงแบบสอบถามเพื่อสร้างการรวมระหว่างตาราง EmployeeEnh และ Department โดยใช้คำสั่งนี้:

ใช้ SampleDb; เลือกเมืองเป็น "เมือง" จาก EmployeeEnh UNION เลือกที่ตั้งจากแผนก

ผลลัพธ์ของแบบสอบถามนี้:

เฉพาะตารางที่เข้ากันได้เท่านั้นที่สามารถเข้าร่วมได้โดยใช้คำสั่ง UNION ตามตารางที่เข้ากันได้ เราหมายความว่าทั้งสองรายการของคอลัมน์ที่เลือกจะต้องมีจำนวนคอลัมน์เท่ากัน และคอลัมน์ที่เกี่ยวข้องจะต้องมีประเภทข้อมูลที่เข้ากันได้ (ในแง่ของความเข้ากันได้ ชนิดข้อมูล INT และ SMALLINT เข้ากันไม่ได้)

ผลลัพธ์ของการรวมสามารถเรียงลำดับได้โดยใช้คำสั่งย่อย ORDER BY ในคำสั่ง SELECT สุดท้าย ดังที่แสดงในตัวอย่างด้านล่าง GROUP BY และ HAVING clause สามารถใช้กับคำสั่ง SELECT แต่ละรายการได้ แต่ไม่สามารถใช้ภายในการรวมได้

แบบสอบถามในตัวอย่างนี้เลือกพนักงานที่ทำงานในแผนก d1 หรือเริ่มทำงานในโครงการก่อนวันที่ 1 มกราคม 2008

ตัวดำเนินการ UNION รองรับพารามิเตอร์ ALL การใช้ตัวเลือกนี้จะไม่ลบรายการที่ซ้ำกันออกจากชุดผลลัพธ์ คุณสามารถใช้ตัวดำเนินการ OR แทนตัวดำเนินการ UNION ได้ หากคำสั่ง SELECT ทั้งหมดที่รวมโดยตัวดำเนินการ UNION อย่างน้อย 1 ตัวอ้างถึงตารางเดียวกัน ในกรณีนี้ ชุดของคำสั่ง SELECT จะถูกแทนที่ด้วยคำสั่ง SELECT เดียวที่มีชุดของตัวดำเนินการ OR

INTERSECT และยกเว้นผู้ประกอบการ

ตัวดำเนินการอีกสองตัวสำหรับการทำงานกับเซ็ต ตัดและ ยกเว้นกำหนดจุดตัดและผลต่างตามลำดับ ภายใต้จุดตัดกันในบริบทนี้ จะมีชุดแถวที่เป็นของทั้งสองตาราง และความแตกต่างระหว่างสองตารางถูกกำหนดให้เป็นค่าทั้งหมดที่อยู่ในตารางแรกและไม่มีอยู่ในตารางที่สอง ตัวอย่างด้านล่างแสดงการใช้ตัวดำเนินการ INTERSECT:

Transact-SQL ไม่รองรับการใช้พารามิเตอร์ ALL ด้วยตัวดำเนินการ INTERSECT หรือ EXCEPT การใช้ตัวดำเนินการ EXCEPT แสดงในตัวอย่างด้านล่าง:

โปรดจำไว้ว่าตัวดำเนินการทั้งสามชุดนี้มีลำดับความสำคัญในการดำเนินการที่แตกต่างกัน ตัวดำเนินการ INTERSECT มีลำดับความสำคัญสูงสุด ตามด้วยตัวดำเนินการ EXCEPT และตัวดำเนินการ UNION มีลำดับความสำคัญต่ำสุด การไม่ใส่ใจกับลำดับความสำคัญของการดำเนินการเมื่อใช้ตัวดำเนินการชุดที่แตกต่างกันหลายตัวอาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิดได้

นิพจน์กรณี

ในการเขียนโปรแกรมแอปพลิเคชันฐานข้อมูล บางครั้งจำเป็นต้องแก้ไขการแสดงข้อมูล ตัวอย่างเช่น ผู้คนสามารถแบ่งย่อยได้โดยการเขียนโค้ดตามชนชั้นทางสังคม โดยใช้ค่า 1, 2 และ 3 แสดงถึงผู้ชาย ผู้หญิง และเด็ก ตามลำดับ เทคนิคการเขียนโปรแกรมนี้สามารถลดเวลาที่ต้องใช้ในการดำเนินโปรแกรม นิพจน์กรณีภาษา Transact-SQL ทำให้ง่ายต่อการใช้งานการเข้ารหัสประเภทนี้

ไม่เหมือนกับภาษาการเขียนโปรแกรมส่วนใหญ่ CASE ไม่ใช่คำสั่ง แต่เป็นนิพจน์ ดังนั้น สามารถใช้นิพจน์ CASE ได้เกือบทุกที่ที่ Transact-SQL อนุญาตให้ใช้นิพจน์ได้ นิพจน์ CASE มีสองรูปแบบ:

    นิพจน์ CASE อย่างง่าย

    นิพจน์การค้นหา CASE

ไวยากรณ์สำหรับนิพจน์ CASE อย่างง่ายคือ:

คำสั่งที่มีนิพจน์ CASE แบบธรรมดาจะค้นหารายการนิพจน์ทั้งหมดก่อน เมื่อข้อนิพจน์แรกที่ตรงกับ expression_1 จากนั้นจึงดำเนินการนิพจน์ที่เกี่ยวข้อง แล้วข้อ- หากไม่มีนิพจน์ที่ตรงกันในรายการ WHEN ข้ออื่น.

ไวยากรณ์นิพจน์การค้นหา CASE เป็นดังนี้:

สิ่งนี้จะค้นหาเงื่อนไขการจับคู่แรก จากนั้นดำเนินการคำสั่งย่อย THEN ที่เกี่ยวข้อง หากไม่มีเงื่อนไขใดที่ตรงตามความต้องการ คำสั่ง ELSE จะถูกดำเนินการ การใช้นิพจน์การค้นหา CASE แสดงในตัวอย่างด้านล่าง:

ใช้ SampleDb; เลือกชื่อโครงการ กรณีเมื่องบประมาณ > 0 และงบประมาณ 100000 และงบประมาณ 150000 และงบประมาณ

ผลลัพธ์ของแบบสอบถามนี้:

ตัวอย่างนี้จะชั่งน้ำหนักงบประมาณของโครงการทั้งหมด จากนั้นแสดงน้ำหนักที่คำนวณได้พร้อมกับชื่อโครงการที่เกี่ยวข้อง

ตัวอย่างด้านล่างแสดงอีกวิธีหนึ่งในการใช้นิพจน์ CASE โดยที่ WHEN clause มีแบบสอบถามย่อยที่เป็นส่วนหนึ่งของนิพจน์:

ใช้ SampleDb; เลือกชื่อโครงการ กรณีเมื่อ p1.Budget (เลือก AVG (p2.Budget) จากโครงการ p2) จากนั้น "สูงกว่าค่าเฉลี่ย" END "หมวดหมู่งบประมาณ" จากโครงการ p1;

ผลลัพธ์ของแบบสอบถามนี้จะเป็นดังนี้:

ตามค่าของคอลัมน์วินัย เราจะได้ 4 กลุ่มซึ่งเราสามารถคำนวณค่ากลุ่มบางค่าได้ เช่น จำนวนสิ่งอันดับในกลุ่ม ค่าสูงสุดหรือต่ำสุดของคอลัมน์คะแนน ตารางที่ 5.7. ฟังก์ชันรวม
การทำงาน ผลลัพธ์
นับ จำนวนแถวหรือค่าฟิลด์ที่ไม่ว่างที่แบบสอบถามเลือก
ผลรวม ผลรวมของค่าที่เลือกทั้งหมดสำหรับฟิลด์นี้
เฉลี่ย ค่าเฉลี่ยเลขคณิตของค่าที่เลือกทั้งหมดสำหรับฟิลด์นี้
นาที ค่าที่น้อยที่สุดจากค่าที่เลือกทั้งหมดสำหรับฟิลด์นี้
สูงสุด ค่าที่ใหญ่ที่สุดในบรรดาค่าที่เลือกทั้งหมดสำหรับฟิลด์นี้
R1
ชื่อเต็ม การลงโทษ ระดับ
กลุ่มที่ 1 เปตรอฟ เอฟ.ไอ. ฐานข้อมูล 5
ซิโดรอฟ เค.เอ. ฐานข้อมูล 4
มิโรนอฟ เอ.วี. ฐานข้อมูล 2
สเตปาโนวา เค.อี. ฐานข้อมูล 2
ครีโลวา ที.เอส. ฐานข้อมูล 5
วลาดีมีรอฟ วี.เอ. ฐานข้อมูล 5
กลุ่มที่ 2 ซิโดรอฟ เค.เอ. ทฤษฎีสารสนเทศ 4
สเตปาโนวา เค.อี. ทฤษฎีสารสนเทศ 2
ครีโลวา ที.เอส. ทฤษฎีสารสนเทศ 5
มิโรนอฟ เอ.วี. ทฤษฎีสารสนเทศ โมฆะ
กลุ่มที่ 3 โทรฟิมอฟ พี.เอ. เครือข่ายและโทรคมนาคม 4
อิวาโนวา อี.เอ. เครือข่ายและโทรคมนาคม 5
อุตคินา เอ็น.วี. เครือข่ายและโทรคมนาคม 5
กลุ่มที่ 4 วลาดีมีรอฟ วี.เอ. ภาษาอังกฤษ 4
โทรฟิมอฟ พี.เอ. ภาษาอังกฤษ 5
อิวาโนวา อี.เอ. ภาษาอังกฤษ 3
เปตรอฟ เอฟ.ไอ. ภาษาอังกฤษ 5

ฟังก์ชันรวมถูกใช้คล้ายกับชื่อฟิลด์ในคำสั่ง SELECT แต่มีข้อยกเว้นประการหนึ่ง คือ ใช้ชื่อฟิลด์เป็นอาร์กิวเมนต์ เฉพาะช่องตัวเลขเท่านั้นที่สามารถใช้ได้กับฟังก์ชัน SUM และ AVG สามารถใช้ทั้งฟิลด์ตัวเลขและอักขระกับฟังก์ชัน COUNT , MAX และ MIN เมื่อใช้กับฟิลด์อักขระ MAX และ MIN จะแปลเป็นโค้ด ASCII ที่เทียบเท่าและประมวลผลตามลำดับตัวอักษร DBMS บางตัวอนุญาตให้ใช้การรวมแบบซ้อนได้ แต่นี่เป็นการเบี่ยงเบนไปจากมาตรฐาน ANSI พร้อมผลที่ตามมาทั้งหมด

เช่น คุณสามารถคำนวณจำนวนนักเรียนที่เข้าสอบในแต่ละสาขาวิชาได้ ในการดำเนินการนี้ คุณต้องเรียกใช้แบบสอบถามที่จัดกลุ่มตามฟิลด์ "วินัย" และแสดงชื่อของสาขาวิชาและจำนวนแถวในกลุ่มสำหรับสาขาวิชานี้ตามผลลัพธ์ การใช้อักขระ * เป็นอาร์กิวเมนต์ในฟังก์ชัน COUNT หมายถึงการนับแถวทั้งหมดในกลุ่ม

เลือก R1.วินัย นับ(*) จาก R1 กลุ่มตาม R1.วินัย

ผลลัพธ์:

หากเราต้องการนับจำนวนผู้สอบผ่านในสาขาวิชาใด ๆ เราต้องแยกค่าที่ไม่แน่นอนออกจากอัตราส่วนเดิมก่อนจึงจะจัดกลุ่มได้ ในกรณีนี้ คำขอจะมีลักษณะดังนี้:

เราได้รับผลลัพธ์:

ในกรณีนี้ให้เข้าแถวกับนักเรียน

มิโรนอฟ เอ.วี. ทฤษฎีสารสนเทศ โมฆะ

จะไม่ตกอยู่ในเซตของสิ่งอันดับก่อนจัดกลุ่ม ดังนั้น จำนวนสิ่งอันดับในกลุ่มที่ต้องวินัย” ทฤษฎีสารสนเทศ" จะน้อยลง 1

สามารถนำมาใช้ ฟังก์ชันรวมโดยไม่มีการดำเนินการจัดกลุ่มล่วงหน้า ซึ่งในกรณีนี้ความสัมพันธ์ทั้งหมดจะถือเป็นกลุ่มเดียว และสำหรับกลุ่มนี้สามารถคำนวณได้ 1 ค่าต่อกลุ่ม

เมื่อกลับไปที่ฐานข้อมูล "เซสชัน" อีกครั้ง (ตาราง R1, R2, R3) เราจะพบจำนวนการสอบที่ผ่านสำเร็จ:

แน่นอนว่าสิ่งนี้แตกต่างจากการเลือกเขตข้อมูล เนื่องจากค่าเดียวจะถูกส่งกลับเสมอ ไม่ว่าในตารางจะมีกี่แถวก็ตาม การโต้แย้ง ฟังก์ชันรวมอาจมีคอลัมน์ตารางแยกกัน แต่ในการคำนวณ เช่น จำนวนค่าที่แตกต่างของคอลัมน์บางคอลัมน์ในกลุ่ม คุณต้องใช้คีย์เวิร์ด DISTINCT ร่วมกับชื่อคอลัมน์ มาคำนวณจำนวนเกรดต่างๆ ที่ได้รับในแต่ละสาขาวิชากัน:

ผลลัพธ์:

ผลลัพธ์อาจรวมถึงค่าฟิลด์การจัดกลุ่มและหลายรายการ ฟังก์ชันรวมและในเงื่อนไขการจัดกลุ่ม คุณสามารถใช้หลายฟิลด์ได้ ในกรณีนี้ กลุ่มจะถูกสร้างขึ้นตามชุดของฟิลด์การจัดกลุ่มที่ระบุ การดำเนินการฟังก์ชันรวมสามารถนำมาใช้เพื่อรวมตารางแหล่งที่มาหลายรายการได้ ตัวอย่างเช่น สมมติว่าแต่ละกลุ่มและแต่ละสาขาวิชากำหนดจำนวนนักเรียนที่สอบผ่านและคะแนนเฉลี่ยในสาขาวิชานั้นสำหรับแต่ละกลุ่มและแต่ละสาขาวิชา

ผลลัพธ์:

เราใช้ไม่ได้ ฟังก์ชันรวมในส่วนคำสั่ง WHERE เนื่องจากเพรดิเคตถูกประเมินในรูปของบรรทัดเดียว และ ฟังก์ชันรวม- ในแง่ของกลุ่มเส้น

ส่วนคำสั่ง GROUP BY ช่วยให้คุณสามารถกำหนดชุดย่อยของค่าในฟิลด์ใดฟิลด์หนึ่งในแง่ของฟิลด์อื่น และใช้ฟังก์ชันการรวมกับเซ็ตย่อย ทำให้สามารถรวมฟิลด์และ ฟังก์ชันรวมในส่วนคำสั่ง SELECT เดียว ฟังก์ชันรวมสามารถใช้ทั้งในนิพจน์สำหรับเอาต์พุตผลลัพธ์ของบรรทัด SELECT และในนิพจน์สำหรับเงื่อนไขการประมวลผลของกลุ่ม HAVING ที่สร้างขึ้น ในกรณีนี้ แต่ละฟังก์ชันรวมจะถูกคำนวณสำหรับแต่ละกลุ่มที่เลือก ค่าที่ได้จากการคำนวณ ฟังก์ชันรวมสามารถใช้เพื่อแสดงผลลัพธ์ที่เกี่ยวข้องหรือกำหนดเงื่อนไขการเลือกกลุ่ม

มาสร้างแบบสอบถามที่แสดงกลุ่มที่ได้รับคะแนนเสียมากกว่าหนึ่งคะแนนในสาขาวิชาเดียวในการสอบ:

ในอนาคตเป็นตัวอย่างเราจะไม่ทำงานกับฐานข้อมูล "เซสชัน" แต่กับฐานข้อมูล "ธนาคาร" ซึ่งประกอบด้วยตาราง F หนึ่งตารางซึ่งเก็บความสัมพันธ์ F ที่มีข้อมูลเกี่ยวกับบัญชีในสาขาของธนาคารบางแห่ง:

F = (N, ชื่อนามสกุล, สาขา, วันเปิดทำการ, วันปิดบัญชี, ยอดคงเหลือ); Q = (สาขา, เมือง);

เนื่องจากบนพื้นฐานนี้จึงเป็นไปได้ที่จะอธิบายงานด้วยฟังก์ชันรวมและการจัดกลุ่มได้ชัดเจนยิ่งขึ้น

ตัวอย่างเช่น สมมติว่าเราต้องการหายอดรวมของบัญชีธนาคาร คุณสามารถสร้างแบบสอบถามแยกกันสำหรับแต่ละสาขาได้โดยเลือก SUM(Balance) จากตารางสำหรับแต่ละสาขา อย่างไรก็ตาม GROUP BY จะอนุญาตให้คุณรวมทุกอย่างไว้ในคำสั่งเดียว:

SELECT Branch, SUM (คงเหลือ) จาก F GROUP BY Branch;

จัดกลุ่มตามนำไปใช้ ฟังก์ชันรวมแยกกันสำหรับแต่ละกลุ่มที่กำหนดโดยใช้ค่าฟิลด์สาขา กลุ่มประกอบด้วยแถวที่มีค่าฟิลด์สาขาเหมือนกันและ

มาเรียนรู้การสรุปกันเถอะ ไม่ นี่ไม่ใช่ผลลัพธ์ของการศึกษา SQL แต่เป็นผลลัพธ์ของค่าของคอลัมน์ในตารางฐานข้อมูล ฟังก์ชันการรวม SQL ทำงานกับค่าของคอลัมน์เพื่อสร้างค่าผลลัพธ์เดียว ฟังก์ชันการรวม SQL ที่ใช้บ่อยที่สุดคือ SUM, MIN, MAX, AVG และ COUNT จำเป็นต้องแยกแยะระหว่างสองกรณีของการใช้ฟังก์ชันรวม ขั้นแรก ฟังก์ชันการรวมจะใช้เพียงอย่างเดียวและส่งกลับค่าผลลัพธ์เพียงค่าเดียว ประการที่สอง ฟังก์ชันการรวมจะใช้กับคำสั่งย่อย SQL GROUP BY นั่นคือการจัดกลุ่มตามฟิลด์ (คอลัมน์) เพื่อรับค่าผลลัพธ์ในแต่ละกลุ่ม ขั้นแรก เรามาพิจารณากรณีต่างๆ ของการใช้ฟังก์ชันรวมโดยไม่ต้องจัดกลุ่มกันก่อน

ฟังก์ชัน SQL SUM

ฟังก์ชัน SQL SUM จะส่งคืนผลรวมของค่าในคอลัมน์ตารางฐานข้อมูล สามารถใช้ได้กับคอลัมน์ที่มีค่าเป็นตัวเลขเท่านั้น คำสั่ง SQL เพื่อรับผลรวมเริ่มต้นดังนี้:

เลือกผลรวม(COLUMN_NAME) ...

นิพจน์นี้ตามด้วย FROM (TABLE_NAME) จากนั้นจึงสามารถระบุเงื่อนไขได้โดยใช้ส่วนคำสั่ง WHERE นอกจากนี้ ชื่อคอลัมน์สามารถนำหน้าด้วย DISTINCT ซึ่งหมายความว่าจะนับเฉพาะค่าที่ไม่ซ้ำเท่านั้น ตามค่าเริ่มต้น ค่าทั้งหมดจะถูกนำมาพิจารณา (สำหรับสิ่งนี้คุณสามารถระบุได้โดยเฉพาะไม่ใช่ DISTINCT แต่เป็น ALL แต่ไม่จำเป็นต้องใช้คำว่า ALL)

ตัวอย่างที่ 1มีฐานข้อมูลบริษัทพร้อมข้อมูลเกี่ยวกับแผนกและพนักงาน ตารางพนักงานยังมีคอลัมน์ที่มีข้อมูลเกี่ยวกับเงินเดือนของพนักงานด้วย การเลือกจากตารางมีลักษณะดังนี้ (หากต้องการขยายภาพให้คลิกด้วยปุ่มซ้ายของเมาส์):

หากต้องการรับผลรวมของเงินเดือนทั้งหมด ให้ใช้แบบสอบถามต่อไปนี้:

เลือก SUM (เงินเดือน) จากพนักงาน

แบบสอบถามนี้จะส่งกลับค่า 287664.63

และตอนนี้ ในแบบฝึกหัดนี้ เราได้เริ่มทำให้งานซับซ้อนขึ้นแล้ว โดยนำงานเหล่านั้นเข้าใกล้งานที่พบในทางปฏิบัติมากขึ้น

ฟังก์ชัน SQL MIN

ฟังก์ชัน SQL MIN ยังทำงานในคอลัมน์ที่มีค่าเป็นตัวเลขและส่งคืนค่าต่ำสุดของค่าทั้งหมดในคอลัมน์ ฟังก์ชันนี้มีไวยากรณ์คล้ายกับฟังก์ชัน SUM

ตัวอย่างที่ 3ฐานข้อมูลและตารางเหมือนกับในตัวอย่างที่ 1

เราจำเป็นต้องค้นหาค่าแรงขั้นต่ำสำหรับพนักงานแผนกหมายเลข 42 โดยเขียนคำขอต่อไปนี้:

แบบสอบถามจะส่งกลับค่า 10505.90

และอีกครั้ง การออกกำลังกายเพื่อการแก้ปัญหาตนเอง- ในแบบฝึกหัดนี้และแบบฝึกหัดอื่นๆ คุณไม่เพียงแต่ต้องมีตาราง Staff เท่านั้น แต่ยังต้องมีตาราง Org ซึ่งมีข้อมูลเกี่ยวกับแผนกต่างๆ ของบริษัทด้วย:


ตัวอย่างที่ 4ตารางองค์กรจะถูกเพิ่มลงในตารางพนักงาน ซึ่งมีข้อมูลเกี่ยวกับแผนกต่างๆ ของบริษัท พิมพ์จำนวนปีขั้นต่ำที่ทำงานของพนักงานหนึ่งคนในแผนกที่ตั้งอยู่ในบอสตัน

ฟังก์ชัน SQL MAX

ฟังก์ชัน SQL MAX ทำงานในลักษณะเดียวกันและมีไวยากรณ์ที่คล้ายกันซึ่งใช้เมื่อคุณต้องการกำหนดค่าสูงสุดจากค่าทั้งหมดในคอลัมน์

ตัวอย่างที่ 5

คุณต้องค้นหาเงินเดือนสูงสุดของพนักงานแผนกหมายเลข 42 โดยเขียนคำขอต่อไปนี้:

แบบสอบถามจะส่งกลับค่า 18352.80

ถึงเวลาแล้ว แบบฝึกหัดสำหรับการแก้ปัญหาอย่างอิสระ.

ตัวอย่างที่ 6เราทำงานกับสองตารางอีกครั้ง - พนักงานและองค์กร แสดงชื่อแผนกและมูลค่าสูงสุดของค่าคอมมิชชั่นที่พนักงาน 1 คนในแผนกที่อยู่ในกลุ่มแผนก (แผนก) ตะวันออก ใช้ เข้าร่วม (เข้าร่วมตาราง) .

ฟังก์ชัน SQL AVG

สิ่งที่ระบุไว้เกี่ยวกับไวยากรณ์สำหรับฟังก์ชันก่อนหน้านี้ที่อธิบายไว้ก็เป็นจริงสำหรับฟังก์ชัน SQL AVG เช่นกัน ฟังก์ชันนี้ส่งคืนค่าเฉลี่ยของค่าทั้งหมดในคอลัมน์

ตัวอย่างที่ 7ฐานข้อมูลและตารางเหมือนกับในตัวอย่างก่อนหน้านี้

สมมติว่าคุณต้องการทราบระยะเวลาการทำงานโดยเฉลี่ยของพนักงานในแผนกหมายเลข 42 โดยเขียนแบบสอบถามต่อไปนี้:

ผลลัพธ์จะเป็น 6.33

ตัวอย่างที่ 8เราทำงานกับโต๊ะตัวเดียว - พนักงาน แสดงเงินเดือนเฉลี่ยของพนักงานที่มีประสบการณ์ 4 ถึง 6 ปี

ฟังก์ชัน SQL COUNT

ฟังก์ชัน SQL COUNT ส่งกลับจำนวนระเบียนในตารางฐานข้อมูล หากคุณระบุ SELECT COUNT(COLUMN_NAME) ... ในแบบสอบถาม ผลลัพธ์จะเป็นจำนวนระเบียนโดยไม่คำนึงถึงระเบียนที่มีค่าคอลัมน์เป็น NULL (ไม่ได้กำหนด) ถ้าคุณใช้เครื่องหมายดอกจันเป็นอาร์กิวเมนต์และเริ่มต้นแบบสอบถาม SELECT COUNT(*) ... ผลลัพธ์จะเป็นจำนวนระเบียน (แถว) ทั้งหมดของตาราง

ตัวอย่างที่ 9ฐานข้อมูลและตารางเหมือนกับในตัวอย่างก่อนหน้านี้

คุณต้องการทราบจำนวนพนักงานทั้งหมดที่ได้รับค่าคอมมิชชั่น จำนวนพนักงานที่มีค่าคอลัมน์ Comm ไม่ใช่ NULL จะถูกส่งกลับโดยแบบสอบถามต่อไปนี้:

เลือก COUNT (สื่อสาร) จากเจ้าหน้าที่

ผลลัพธ์จะเป็น 11

ตัวอย่างที่ 10ฐานข้อมูลและตารางเหมือนกับในตัวอย่างก่อนหน้านี้

หากคุณต้องการค้นหาจำนวนระเบียนทั้งหมดในตาราง ให้ใช้แบบสอบถามที่มีเครื่องหมายดอกจันเป็นอาร์กิวเมนต์ของฟังก์ชัน COUNT:

เลือก COUNT(*) จากเจ้าหน้าที่

ผลลัพธ์จะเป็น 17

ในครั้งต่อไป แบบฝึกหัดเพื่อการแก้ปัญหาอย่างอิสระคุณจะต้องใช้แบบสอบถามย่อย

ตัวอย่างที่ 11เราทำงานกับโต๊ะตัวเดียว - พนักงาน แสดงจำนวนพนักงานในแผนกวางแผน (ธรรมดา)

รวมฟังก์ชันด้วย SQL GROUP BY

ตอนนี้เรามาดูการใช้ฟังก์ชันรวมร่วมกับคำสั่ง SQL GROUP BY คำสั่ง SQL GROUP BY ใช้เพื่อจัดกลุ่มค่าผลลัพธ์ตามคอลัมน์ในตารางฐานข้อมูล

ตัวอย่างที่ 12มีฐานข้อมูลพอร์ทัลโฆษณา มีตารางโฆษณาที่มีข้อมูลเกี่ยวกับโฆษณาที่ส่งมาประจำสัปดาห์ คอลัมน์หมวดหมู่ประกอบด้วยข้อมูลเกี่ยวกับหมวดหมู่โฆษณาขนาดใหญ่ (เช่น อสังหาริมทรัพย์) และคอลัมน์ส่วนประกอบด้วยข้อมูลเกี่ยวกับส่วนเล็กๆ ที่รวมอยู่ในหมวดหมู่ (เช่น ส่วนของอพาร์ตเมนต์และบ้านพักฤดูร้อนเป็นส่วนหนึ่งของหมวดหมู่อสังหาริมทรัพย์) คอลัมน์หน่วยประกอบด้วยข้อมูลเกี่ยวกับจำนวนโฆษณาที่ส่ง และคอลัมน์เงินประกอบด้วยข้อมูลเกี่ยวกับจำนวนเงินที่ได้รับสำหรับการส่งโฆษณา

หมวดหมู่ส่วนหนึ่งหน่วยเงิน
ขนส่งรถยนต์110 17600
อสังหาริมทรัพย์อพาร์ตเมนต์89 18690
อสังหาริมทรัพย์เดชา57 11970
ขนส่งรถจักรยานยนต์131 20960
วัสดุก่อสร้างบอร์ด68 7140
วิศวกรรมไฟฟ้าทีวี127 8255
วิศวกรรมไฟฟ้าตู้เย็น137 8905
วัสดุก่อสร้างRegips112 11760
เวลาว่างหนังสือ96 6240
อสังหาริมทรัพย์ที่บ้าน47 9870
เวลาว่างดนตรี117 7605
เวลาว่างเกมส์41 2665

ใช้คำสั่ง SQL GROUP BY ค้นหาจำนวนเงินที่ได้รับจากการโพสต์โฆษณาในแต่ละหมวดหมู่ เราเขียนคำขอต่อไปนี้

สามารถดำเนินการประมวลผลกลุ่มทั่วไปของค่าฟิลด์ได้ ทำได้โดยใช้ฟังก์ชันรวม ฟังก์ชันการรวมจะสร้างค่าเดียวสำหรับทั้งกลุ่มตาราง SQL มีฟังก์ชันการรวมดังต่อไปนี้:

  • นับ– นับจำนวนแถวของตารางด้วยค่าที่ไม่ใช่ NULL ของฟิลด์ที่ระบุเป็นอาร์กิวเมนต์
  • ผลรวม– คำนวณผลรวมเลขคณิตของค่าที่เลือกทั้งหมดสำหรับฟิลด์ที่กำหนด
  • เฉลี่ย– เฉลี่ยค่าที่เลือกทั้งหมดของฟิลด์นี้
  • สูงสุด– แสดงค่าที่ใหญ่ที่สุดของค่าที่เลือกทั้งหมดสำหรับฟิลด์นี้
  • นาที– แสดงค่าที่น้อยที่สุดของค่าที่เลือกทั้งหมดสำหรับฟิลด์นี้

    การใช้ฟังก์ชันรวม

    ฟังก์ชันการรวมจะใช้คล้ายกับชื่อฟิลด์ในส่วนคำสั่ง SELECT ของคิวรี โดยมีข้อยกเว้นประการหนึ่งคือ ใช้ชื่อฟิลด์เป็นอาร์กิวเมนต์ สามารถใช้เฉพาะช่องตัวเลขเท่านั้น ผลรวมและ เฉลี่ย- กับ นับ, สูงสุด, และ นาทีสามารถใช้ทั้งฟิลด์ตัวเลขและอักขระได้ เมื่อใช้กับช่องอักขระ สูงสุดและ นาทีจะแปลให้เทียบเท่ากับ ASCII นี่หมายความว่า นาทีจะเลือกอันแรกและ สูงสุดค่าสุดท้ายตามลำดับตัวอักษร

    หากต้องการค้นหายอดขายรวมในตารางการขาย เราต้องเขียนแบบสอบถามต่อไปนี้:

    เลือก SUM(SSum) จากการขาย

    เป็นผลให้เราได้รับ:

    แบบสอบถามนี้นับจำนวนค่าที่ไม่ว่างในช่อง SNum ของตารางการขาย ถ้าเราเขียนแบบสอบถามใหม่ดังนี้:

    เลือก COUNT(SDate) จากการขาย

    เป็นผลให้เราได้รับ:

    นับวันที่
    4

    ผลลัพธ์การค้นหาที่แตกต่างกันเมื่อคำนวณสิ่งที่ดูเหมือนจะเป็นสิ่งเดียวกันนั้นได้มาเนื่องจากค่าฟิลด์ SDate ค่าใดค่าหนึ่งว่างเปล่า ( โมฆะ- โปรดใช้ความระมัดระวังเมื่อใช้คำค้นหาดังกล่าว

บทเรียนจะครอบคลุมหัวข้อ sql การเปลี่ยนชื่อคอลัมน์ (ฟิลด์) โดยใช้คำว่าบริการ AS หัวข้อของฟังก์ชันการรวมใน sql ก็ครอบคลุมเช่นกัน เราจะหารือถึงตัวอย่างคำขอที่เฉพาะเจาะจง

ชื่อคอลัมน์ในแบบสอบถามสามารถเปลี่ยนชื่อได้ ทำให้อ่านผลลัพธ์ได้ง่ายขึ้น

ใน SQL การเปลี่ยนชื่อฟิลด์เกี่ยวข้องกับการใช้ เป็นคำหลักซึ่งใช้ในการเปลี่ยนชื่อฟิลด์ในชุดผลลัพธ์

ไวยากรณ์:

เลือก<имя поля>เช่น<псевдоним>จาก...

ลองดูตัวอย่างการเปลี่ยนชื่อใน SQL:

ตัวอย่างฐานข้อมูล “สถาบัน”:แสดงชื่อครูและเงินเดือน สำหรับครูที่มีเงินเดือนต่ำกว่า 15,000 ให้เปลี่ยนชื่อฟิลด์ zarplata เป็น "เงินเดือนต่ำ"


✍ วิธีแก้ไข:

การเปลี่ยนชื่อคอลัมน์ใน SQL มักเป็นสิ่งที่จำเป็น เมื่อคำนวณค่าที่เกี่ยวข้องกับหลายฟิลด์ตาราง ลองดูตัวอย่าง:

ตัวอย่างฐานข้อมูล “สถาบัน”:จากตารางครู ให้แสดงช่องชื่อและคำนวณจำนวนเงินเดือนและโบนัส ตั้งชื่อช่อง "เงินเดือน_โบนัส"


✍ วิธีแก้ไข:
1 2 เลือกชื่อ (zarplata+ premia) AS zarplata_premia จากครู;

เลือกชื่อ (zarplata+premia) AS zarplata_premia จากครู;

ผลลัพธ์:

ฟังก์ชันการรวมใน SQL

ในการรับค่ารวมและประเมินนิพจน์จะใช้ฟังก์ชันรวมใน sql:

ฟังก์ชันการรวมทั้งหมดส่งคืนค่าเดียว

ฟังก์ชัน COUNT, MIN และ MAX ใช้กับข้อมูลชนิดใดก็ได้

ฟังก์ชัน SUM และ AVG ใช้สำหรับเขตข้อมูลตัวเลขเท่านั้น
มีความแตกต่างระหว่างฟังก์ชัน COUNT(*) และ COUNT(): ฟังก์ชันที่สองไม่ได้คำนึงถึงค่า NULL เมื่อคำนวณ

สำคัญ:เมื่อทำงานกับฟังก์ชันการรวมใน SQL จะใช้คำฟังก์ชัน เช่น


ตัวอย่างฐานข้อมูล “สถาบัน”:รับค่าเงินเดือนสูงสุดในหมู่ครูแสดงผลเป็น "สูงสุด_เงินเดือน"


✍ วิธีแก้ไข:
เลือก MAX (zarplata) AS max_salary จากครู

เลือก MAX (zarplata) AS max_salary จากครู

ผลลัพธ์:

ลองดูตัวอย่างที่ซับซ้อนมากขึ้นของการใช้ฟังก์ชันการรวมใน sql


✍ วิธีแก้ไข:

จัดกลุ่มตามข้อใน SQL

การจัดกลุ่มตามตัวดำเนินการใน sql มักจะใช้ร่วมกับฟังก์ชันการรวม

ฟังก์ชันการรวมจะถูกดำเนินการกับแถวแบบสอบถามผลลัพธ์ทั้งหมด ถ้าแบบสอบถามมีส่วนคำสั่ง GROUP BY แต่ละชุดของแถวที่ระบุในส่วนคำสั่ง GROUP BY จะถือว่าเป็นกลุ่ม และฟังก์ชันการรวมจะถูกดำเนินการ สำหรับแต่ละกลุ่มแยกกัน.

ลองดูตัวอย่างพร้อมตารางบทเรียน:

ตัวอย่าง:

สำคัญ:ดังนั้นด้วยการใช้ GROUP BY แถวเอาต์พุตแบบสอบถามทั้งหมดจะถูกแบ่งออกเป็นกลุ่มที่มีลักษณะเฉพาะด้วยชุดค่าผสมที่เหมือนกันในคอลัมน์เหล่านั้น (นั่นคือ ฟังก์ชันรวมจะดำเนินการในแต่ละกลุ่มแยกกัน)

ควรพิจารณาว่าเมื่อจัดกลุ่มตามฟิลด์ที่มีค่า NULL บันทึกดังกล่าวทั้งหมดจะรวมอยู่ในกลุ่มเดียว

สำหรับเครื่องพิมพ์ประเภทต่างๆ ให้กำหนดต้นทุนและปริมาณโดยเฉลี่ย (เช่น แยกกันสำหรับเลเซอร์ อิงค์เจ็ท และเมทริกซ์) ใช้ฟังก์ชันการรวม ผลลัพธ์ควรมีลักษณะดังนี้:

มีคำสั่ง SQL

จำเป็นต้องใช้ส่วนคำสั่ง HAVING ใน SQL เพื่อตรวจสอบค่า ซึ่งได้มาโดยใช้ฟังก์ชันการรวมหลังการจัดกลุ่ม(หลังจากใช้ GROUP BY) เช็คดังกล่าว ไม่สามารถอยู่ในส่วนคำสั่ง WHERE ได้.

ตัวอย่าง: ร้านดีบีคอมพิวเตอร์- คำนวณราคาเฉลี่ยของคอมพิวเตอร์ที่มีความเร็วโปรเซสเซอร์เท่ากัน คำนวณเฉพาะกลุ่มที่มีราคาเฉลี่ยน้อยกว่า 30,000 เท่านั้น