Online Reference

Home

Microsoft Reference
Knowledge Developer Database Internet Resource Forum
Access
SQL Aggregate Function
ดาวน์โหลดคู่มือ

Count Function

SQL Aggregate Function, ค่าที่ส่งออกมาเป็นการนับจำนวนเรคคอร์ดของคิวรี่

ไวยากรณ์

Count(expr )

ตำแหน่ง expr เป็น expression ของข้อความระบุฟิลด์ที่เก็บข้อมูล ซึ่งต้องการนำมานับจำนวนหรือเป็น expression ที่ใช้นำข้อมูลของฟิลด์นั้นมาคำนวณ ฟิลด์ใน expression สามารถเป็นชื่อฟิลด์ของ Table, ค่าคงที่ หรือฟังก์ชัน (สามารถนำใช้ฟังก์ชันที่ built-in หรือกำหนดเอง แต่ห้ามใช้ฟังก์ชันอื่นของ SQL aggregate function) การนับสามารถนับข้อมูลได้ทุกประเภท

ลักษณะการประยุกต์

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

ฟังก์ชัน Count ไม่นับฟิลด์ว่าง (Null field) ยกเว้น expr ใช้ดอกจัน (*) ถ้าใช้ดอกจัน (*)ฟังก์ชัน Count สามารถคำนวณจำนวนเรคคอร์ดทั้งหมด รวมถึงฟิลด์ว่าง นอกจากนี้ Count(*) สามารถทำงานได้เร็วกว่า Count([Column Name]) แต่ห้ามใช้เครื่องหมายดอกจันในเครื่องหมายคำพูด(“ “)

SELECT Count(*)
AS TotalsOrders FROM Orders;

ถ้า expr ชี้ถึงฟิลด์หลายฟิลด์ ฟังก์ชัน Count จะเฉพาะนับเรคคอร์ดที่มีอย่างน้อย 1 ฟิลด์ไม่ใช่ค่าว่าง (Null) ถ้าฟิลด์ที่ระบุทั้งหมดเป็นค่าว่าง จะไม่มีการนับเรคคอร์ด การแยกฟิลด์ให้ใช้เครื่องหมาย (&) ตัวอย่างต่อไป เป็นการแสดงกรจำกัดการนับเรคคอร์ดที่ทั้ง ShippedDate และ Freight ไม่เป็นค่าว่าง

SELECT
Count('ShippedDate & Freight')
AS [Not Null] FROM Orders;

สามารถใช้ฟังก์ชัน Avg เป็น expression ในคิวรี่ และในคุณสมบัติ SQL ของอ๊อบเจค QueryDef หรือการสร้าง Recordset ที่มาจากคิวรี่ของ SQL

ดูเพิ่มเติม

อ๊อบเจค QueryDef (DAO Language Reference), คุณสมบัติ RecordCount (DAO Language Reference), SELECT Statement, คุณสมบัติ SQL (DAO Language Reference), ฟังก์ชัน Sum

การประยุกต์ใน Access

ใน Microsoft Access สามารถใช้ฟังก์ชัน Count ในตารางออกแบบคิวรี่, ในคำสั่ง SQL ที่ SQL view ของ Query Window, หรือในคำสั่ง SQL ภายในชุดคำสั่ง Visual Basic รวมถึงการใช้ฟังก์ชัน Count ในการคำนวณตัว control บนฟอร์มหรือรายงาน

ฟังก์ชัน Count มีประโยชน์อย่างมากใน Totals query และ Crosstab query การสร้างฟังก์ชันทำแบบเดียวกับการสร้างฟังก์ชัน Count ในตารางออกแบบคิวรี่, ในคำสั่ง SQL ที่ SQL view ของ Query Window

ในตารางออกแบบคิวรี่ สามารถสร้าง Totals query โดยคลิกปุ่ม Totals บนแถบเครื่องมือ Query Design แถว Totals จะแทรกในตาราง จากนั้นให้ตั้งค่าเซลล์ Totals ของฟิลด์เป็น aggregate function เพื่อคำนวณข้อมูล ในการนับเรคคอร์ดทั้งหมด การสร้างด้วยฟังก์ชัน Count(*) สามารถทำได้เร็วกว่า เช่น สมมติว่ามี Table ชื่อ Orders มีฟิลด์ OrderID และ ShipCity ที่ต้องการนำมาสร้างเป็นคิวรี่เพื่อแสดงจำนวนใบสั่งซื้อที่ส่งไปแต่ละเมือง ให้สร้าง Totals query ใหม่และ drag ฟิลด์ ShipCity ลงในตารางออกแบบคิวรี่ แล้วตั้งค่าเซลล์ Totals ของฟิลด์ ShipCity เป็น Group By จากนั้นสร้างฟิลด์คำนวณโดยการพิมพ์ expression ลงในฟิลด์ใหม่

CountOfOrders:Count(*)

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

การดูคำสั่ง SQL ของคิวรี่นี้ ให้เปลี่ยนเป็น SQL view ตามตัวอย่างข้างต้นจะเห็นคำสั่ง

SELECT ShipCity, Count(*) As CountOfOrders From Orders GROUP BY ShipCity;

นอกจากนี้สามารถใช้วิธี drag ฟิลด์ OrderID ลงในตารางออกแบบคิวรี่ แล้วตั้งค่าเซลล์ Totals ของฟิลด์ ShipCity เป็น Count ซึ่งคำสั่งจะช้ากว่าการใช้ Count(*) และคำสั่ง SQL จะแตกต่างกัน

SELECT ShipCity, Count(OrderID) As CountOfOrders From Orders GROUP BY ShipCity;

สามารถใช้คำสั่ง SQL ภายในชุดคำสั่ง Visual Basic ตัวอย่างเช่น procedure ต่อไปนี้เป็นการสร้าง dynaset แบบ Recordset ตามคำสั่ง SQL

Sub CountOrders()

  Dim dbs As Database, rst as Recordset, strSQL As String

  Set dbs = CurrentDb
  strSQL = "SELECT ShipCity, Count(*) As CountOfOrders" _
& "From Orders GROUP BY ShipCity;"

  Set rst = dbs.OprnRecordset(strSQL)
  rst.MoveLast

  Debug.Print rst.RecordCount
  Set dbs = Nothing

End Sub

การใช้ฟังก์ชัน Count ในการคำนวณตัว control ให้ตั้งค่าของคุณสมบัติ ControlSource ด้วย expression ของฟังก์ชัน Count เช่น

= Count([OrderID])

ถ้าต้องการจำกัดค่าในการคำนวณสำหรับฟังก์ชัน Count ให้ตั้งค่าในการคัดเลือกข้อมูลที่คุณสมบัติ Filter

ตัวอย่าง

ตัวอย่างการหาจำนวนใบสั่งซื้อที่ส่งไปยัง United Kingdom โดยสมมติให้ EnumFields procedure เป็น procedure ในการพิมพ์ผลลัพธ์

Sub CountX()

  Dim dbs As Database, rst As Recordset

  ' ต้องปรับปรุงคำสั่งนี้ให้มีพาร์ทของ Northwind
  Set dbs = OpenDatabase("Northwind.mdb")

  ' คำนวณใบส่งของที่ส่งไปยัง United Kingdom
  Set rst = dbs.OpenRecordset("SELECT" _
& " Count (ShipCountry)" _
& " AS [UK Orders] FROM Orders" _
& " WHERE ShipCountry = 'UK';")

  rst.MoveLast ' ย้าย Recordset

  ' เรียก EnumFields พิมพ์เนื้อหาของ Recordset โดยส่งผ่าน Recordset และความกว้างฟิลด์ที่ต้องการ
  EnumFields rst, 25
  dbs.Close

End Sub

ตัวอย่างการประยุกต์ใน Access

การใช้ฟังก์ชัน Count ในการคำนวณจำนวนใบสั่งซื้อที่ส่งไปยัง United Kingdom สามารถสร้าง expression ใน SQL view ของ Query Window

SELECT Count(ShipCountry) AS [UKOrders] FROM Orders WHERE ShipCountry = 'UK';

การใช้ฟังก์ชัน Count ในการคำนวณค่าตัว control ของฟอร์มเพื่อหาค่าตามตัวอย่างข้างต้น ซึ่งใช้แหล่งข้อมูลจาก Table ชื่อ Orders เช่นเดียวกัน การประยุกต์ฟังก์ชัน Count ให้สร้างเป็น expression ในคุณสมบัติ ControlSource ของตัว control ในฟอร์ม และการคัดเลือกค่าฟิลด์ ShipCountry เท่ากับ UK ให้กำหนด expression ในคุณสมบัติ Filter ของฟอร์ม

= Count([ShipCountry])