程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> where group by聯合使用

where group by聯合使用

編輯:MySQL綜合教程

where group by聯合使用   select 列a,聚合函數 from 表名 where 過濾條件 group by 列a having 過濾條件 group by 字句也和where條件語句結合在一起使用。當結合在一起時,where在前,group by 在後。即先對select xx from xx的記錄集合用where進行篩選,然後再使用group by 對篩選後的結果進行分組 使用having字句對分組後的結果進行篩選 需要注意having和where的用法區別: 1.having只能用在group by之後,對分組後的結果進行篩選(即使用having的前提條件是分組)。 2.where肯定在group by 之前 3.where後的條件表達式裡不允許使用聚合函數,而having可以。 四、當一個查詢語句同時出現了where,group by,having,order by的時候,執行順序和編寫順序是: 1.執行where xx對全表數據做篩選,返回第1個結果集。 2.針對第1個結果集使用group by分組,返回第2個結果集。 3.針對第2個結果集中的每1組數據執行select xx,有幾組就執行幾次,返回第3個結果集。 4.針對第3個結集執行having xx進行篩選,返回第4個結果集。 5.針對第4個結果集排序。 例子: 完成一個復雜的查詢語句,需求如下: 按由高到低的順序顯示個人平均分在70分以上的學生姓名和平均分,為了盡可能地提高平均分,在計算平均分前不包括分數在60分以下的成績,並且也不計算賤人(jr)的成績。  分析: 1.要求顯示學生姓名和平均分 因此確定第1步

select s_name,avg(score) from student

 

2.計算平均分前不包括分數在60分以下的成績,並且也不計算賤人(jr)的成績 因此確定第2步 
where score>=60 and s_name !=’jr’

 

3.顯示個人平均分 相同名字的學生(同一個學生)考了多門科目 因此按姓名分組 確定第3步 
group by s_name

 

4.顯示個人平均分在70分以上 因此確定第4步 
having avg(s_score)>=70

 

 5.按由高到低的順序 因此確定第5步
 order by avg(s_score) desc

 

前面也記錄一篇  http://www.BkJia.com/database/201212/179348.html   五、索引    1.索引是單獨的數據庫對象,索引也需要被維護。   2.索引可以提高查詢速度,但會降增刪改的速度。   3.通過一定的查詢觸發,並不是越多越好。   什麼時候不適合用索引?   1.當增刪改的操作大於查詢的操作時。   2.查詢的語句大於所有語句的三分之一時。
   創建索引語法:create index 索引名 on 表明 (列名)
   刪除索引語法:drop index 索引名

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved