Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 105,002

HOME > ASP > SQL Tutorial (Part 2) > SQL GROUP BY and HAVING


VPS  250 ҷ͹

SQL GROUP BY and HAVING

ข้อควรทราบเมื่อต้องใช้  GROUP BY and HAVING

        1. ถ้าในคำสั่งมีการเลือกคอลัมน์ที่ถูกคำนวณด้วย aggregate function และคอลัมที่ไม่ได้ถูกคำนวณด้วย aggregate function
อยู่ด้วยกันคุณต้องใช้วลี GROUP BY ร่วมด้วยมิเช่นนั้นจะเกิดข้อผิดพลาด เนื่องจากค่าที่ถูกคำนวณด้วย aggregate function จะคืนค่ามาเพียงค่าเดียว ส่งนคอลัมน์ที่ไม่ได้ถูกคำนวณจะคืนค่าออกมาหลายๆ Record ทำให้จำนวน Record ของทั้ง 2 คอลัมน์ไม่เท่ากัน จึงไม่สามารถแสดงผลลอกมาให้เราดูได้ เช่น

  strSQL = "SELECT Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "

ถ้าใช้คำสั่งเพียงแค่นี้จะผิดทันที อย่างที่ถูกคือ

  strSQL = "SELECT Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "GROUP BY Profile_Location


      2. ต่อเนื่องมาจากข้อที่ 1 ถ้าได้มีการใช้วลี GROUP BY แล้ว คอลัมน์ที่ตามหลังวลี GROUP BY 
จะต้องเลือกคอลลัมน์ทั้งหมด ทั้งที่ถูกคำนวณและไม่ถูกคำนวณจะเลือกเพียงคอลัมน์ใดคอลัมน์หนึ่งไม่ได้
ซึ่งเหตุผลก็เหมือนกับข้อแรกคือจำนวน Record จะไม่เท่ากัน ดังนี้

  strSQL = "SELECT Profile_ID,Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "GROUP BY Profile_Location

ถ้าใช้คำสั่งเพียงแค่นี้จะผิดทันที อย่างที่ถูกคือ

  strSQL = "SELECT Profile_ID,Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "GROUP BY Profile_ID,Profile_Location


      3. คอลัมน์ที่ตามหลังวลี GROUP BY 
ซึ่งเลือกขึ้นมา เพื่อจัดกลุ่มไม่จำเป็นต้องอยู่ในวลี SELECT แต่ต้องเป็นคอลัมน์ที่มีอยู่ในตารางที่กำหนดในวลี FROM ดังนี้

  strSQL = "SELECT SUM(Profile_Age) As ผลรวมของอายุ"
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "GROUP BY  Profile_ID >= 5 AND Profile_ID <= 8 " 


        4. วลี HAVING  กับ WHERE มีข้อแตกต่างกันตรงลำดับการตรวจสอบของเงื่อนไข โดยวลี WHERE  จะเลือก Record ที่ตรงตามเงื่อไขไว้ก่อนที่คอลัมน์นั้นจะถูกคำนวณโดย aggregate function ดังนั้นเงื่อนไขในวลี WHERE จะใช้ผลลัพธ์ที่ถูกคำนวณจาก aggregate function มาในการกำหนดเงื่อนไขไม่ได้ แต่ทว่าวลี HAVING นั้นจะเลือก Record ที่ตรงตามเงื่อนไขหลังจากที่คอลัมน์นั้นถูกคำนวณด้วย aggregate function แล้วดังนี้
 

  strSQL = "SELECT Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "WHERE SUM(Profile_Age) > 30
  strSQL = strSQL & "GROUP BY Profile_Location

  strSQL = strSQL & "HAVING Profile_Age > 35



ถ้าใช้คำสั่งเพียงแค่นี้จะผิดทันที อย่างที่ถูกคือ

  strSQL = "SELECT Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "WHERE Profile_Age > 30
  strSQL = strSQL & "GROUP BY Profile_Location

  strSQL = strSQL & "HAVING SUM(Profile_Age) > 35


      5. ในกรณีที่ต้องการให้คอลัมน์ที่ไม่ตรงตามเงื่อนไขในวลี WHERE ถูกแสงดค่าออกมาเป็น NULL ด้วยหลังจากจัดกลุ่มแล้ว ให้ใส้คีเวิร์ด ALL ตามหลังวลี GROUP BY ดังนี้

  strSQL = "SELECT Profile_Location, SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "WHERE Profile_Age > 30
  strSQL = strSQL & "GROUP BY ALL Profile_Location " 


     6. ในการเขียนคำสั่งแล้วรันผลด้วย ASP จะต้องมีการเปลี่ยนชื่อของคอลัมน์เสมอไม่เช่นนั้นจะไม่สามารถแสดงผลลอกมาได้ ซึ่งต่างกับการใช้ โปรแกรม MS SQL SERVER ที่ไม่ต้องตั้งชื่อใหม่ก็ได้เพราะจะขึ้นให้ในตาราง VIEW ว่า (No column name) 

  strSQL = "SELECT SUM(Profile_Age) As ผลรวมของอายุ "
  strSQL = strSQL & "FROM Profile "
  strSQL = strSQL & "WHERE Profile_ID >= 5 AND Profile_ID <= 8 " 








   
Share


ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท


ลองใช้ค้นหาข้อมูล


   


Bookmark.   
       
  By : ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)
  Score Rating :  
  Create/Update Date : 2008-08-10 16:04:03 / 2012-05-30 21:09:44
  Download : No files
 Sponsored Links / Related

 
What SQL ?
Rating :

 
Database & Connection
Rating :

 
SQL CREATE TABLE
Rating :

 
SQL ALTER TABLE ( ADD,DROP )
Rating :

 
SQL DROP TABLE
Rating :

 
SQL INSERT
Rating :

 
SQL SELECT , FROM, TOP, ORDER BY
Rating :

 
SQL SELECT DISTINCT, AS
Rating :

 
SQL SELECT ... WHERE,AND,OR,NOT,IN,LIKE
Rating :

 
SQL SELECT GROUP BY and HAVING
Rating :

 
SQL JOIN TABLE
Rating :

 
SQL SELECT INNER JOIN
Rating :

 
SQL SELECT SUBQUERY
Rating :

 
SQL INSERT INTO
Rating :


ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


สุดยอด Source Code V2.0
 

แจ้งชำระเงิน/โอนเงิน
 

Hit Link
   


Acc : thaicreate@hotmail.com




Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2018 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
for Contact Us : [Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่