6、聚合函數、數據分組

1.AVG函數:求平均值。

須要注意的是:每一個字段都必須使用一個AVG函數:函數

select avg(id) as id_avg,avg(price) as price_avg from tb2;

如上,這樣才能分別求出id和price的平均值。code

AVG函數忽略NULL。blog

2.COUNT函數:統計數量。

  • 使用 COUNT(*) 對錶中行的數目進行計數,無論表列中包含的是空值( NULL )仍是非空值。
  • 使用 COUNT(column) 對特定列中具備值的行進行計數,忽略NULL值。ip

    select count(*) from tb2;
    select count(column_name) from tb2;
    第一條語句會計算包含空值的記錄,第二條語句則不會。select

3. MAX和MIN函數:計算最大值和最小值。

MAX(),MIN()都必須指定列名。分別找出這一列最大值和最小值。方法

4. SUM函數:統計合計計算值。

select sum(id) as id_sum,sum(price) as price_sum from tb2;

此語句分別檢索出id和price的和。im

5. Group by子句:分組。

例如:統計

select id,count(*) as id_count from tb2 group by id;

此語句按id分組來檢索出id和id數量。結果爲:總結

tips:若是出現聚合函數,則只能使用group by而不能夠使用order by.數據

6. having子句:過濾分組。

  • WHERE 過濾指定的是行而不是分組。 事實上, WHERE 沒有分組的概念。
  • 目前爲止所學過的全部類型的 WHERE 子句均可以用 HAVING 來替代。惟一的差異是WHERE 過濾行,而 HAVING 過濾分組。

能夠理解成,having能夠替代where,可是where不能替代having。由於having還能夠過濾分組。

select id, count(*) from tb2 group by id having count(*)>=2;

此語句按id爲分組,並檢索出id數量不小於2的id和對應的數量。

HAVING 和 WHERE 的差異這裏有另外一種理解方法:

  • WHERE 在數據分組前進行過濾,HAVING在數據分組後進行過濾。
  • WHERE排除的行不包括在分組中。這可能會改變計算值,從而影響HAVING子句中基於這些值過濾掉的分組。

where和having連用:

select id,price,count(*) from tb2 where price > 555 group by id having count(*)>=1;

以id爲分組,檢索price大於555而且數量很多於1的id,price,以及數量。

7.總結

相關文章
相關標籤/搜索