資料庫聚集函數
A. 資料庫聚合函數count和count的區別
count 是用於統計查詢結果的個數,屬於聚合函數。
可以通過以下方面進行了解:
利用臨時表進行測試
sql">withtbas
(
select1nfromalunionall
select1nfromalunionall
selectnullnfromalunionall
select2nfromalunionall
select3nfromal
)
1, 獲取查詢結果總行數
selectcount(*)fromtb;--5
由tb數據可見,tb中共有5條數據。
2,查詢非null欄位的行數
selectcount(n)fromtb;--4
該語句查詢欄位n不為null的總數量,由tb可見,n有一行為null,所以結果為4.
需要注意,若n為非null欄位,查詢總數時,使用count(*) 比 count(n)速度要快。
原因是count(欄位)在統計時,若欄位為null,計數不加。若欄位不是null,計數+1.
3, 統計非空欄位的非重復的內容數量
selectcount(distinctn)fromtb;--3
由於count(n)為獲取非null欄位數量。distinct為去掉重復值。所以,此結果為先去掉n的重復值再統計。
4,計算欄位的非重復數量
selectcount(distinctnvl(n,4)fromtb;--5
先提供null值為一個n中不存在的值,然後去掉重復值進行統計。
效果等同於
selectcount(distinctn)+1fromtb;
B. 聚集函數的介紹
和大多數其它關系資料庫產品一樣, PostgreSQL 支持聚集函數。 一個聚集函數從多個輸入行中計算出一個結果。 比如,我們有在一個行集合上計算 count(數目), sum(和),avg(均值), max(最大值)和min(最小值)的函數。
C. sql聚合函數有哪些
聚集函數
和大多數其它關系資料庫產品一樣,PostgreSQL 支持聚集函數。一個聚集函數從多個輸入行中計算出一個結果。比如,我們有在一個行集合上計算 count(數目), sum(總和), avg(均值), max(最大值), min(最小值)的函數。
比如,我們可以用下面的語句找出所有低溫中的最高溫度:
SELECT max(temp_lo) FROM weather; max
-----
46
(1 row)如果我們想知道該讀數發生在哪個城市,可能會用:
SELECT city FROM weather WHERE temp_lo = max(temp_lo); -- 錯!不過這個方法不能運轉,因為聚集函數 max 不能用於 WHERE 子句中。存在這個限制是因為 WHERE 子句決定哪些行可以進入聚集階段;因此它必需在聚集函數之前計算。不過,我們可以用其它方法實現這個目的;這里我們使用子查詢:
SELECT city FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather); city
---------------
San Francisco
(1 row)這樣做是可以的,因為子查詢是一次獨立的計算,它獨立於外層查詢計算自己的聚集。
聚集同樣也常用於 GROUP BY 子句。比如,我們可以獲取每個城市低溫的最高值:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city; city | max
---------------+-----
Hayward | 37
San Francisco | 46
(2 rows)這樣每個城市一個輸出。每個聚集結果都是在匹配該城市的行上面計算的。我們可以用 HAVING 過濾這些分組:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING max(temp_lo) < 40; city | max
---------+-----
Hayward | 37
(1 row)這樣就只給出那些 temp_lo 值曾經有低於 40 度的城市。最後,如果我們只關心那些名字以"S"開頭的城市,我們可以用:
SELECT city, max(temp_lo)
FROM weather
WHERE city LIKE 'S%'
GROUP BY city
HAVING max(temp_lo) < 40;語句中的 LIKE 執行模式匹配,在節9.7里有解釋。
理解聚集和 SQL 的 WHERE 和 HAVING 子句之間的關系非常重要。WHERE 和 HAVING 的基本區別如下:WHERE 在分組和聚集計算之前選取輸入行(它控制哪些行進入聚集計算),而 HAVING 在分組和聚集之後選取輸出行。因此,WHERE 子句不能包含聚集函數;因為試圖用聚集函數判斷那些行將要輸入給聚集運算是沒有意義的。相反,HAVING 子句總是包含聚集函數。當然,你可以寫不使用聚集的 HAVING 子句,但這樣做沒什麼好處,因為同樣的條件可以更有效地用於 WHERE 階段。
在前面的例子里,我們可以在 WHERE 里應用城市名稱限制,因為它不需要聚集。這樣比在 HAVING 里增加限制更加高效,因為我們避免了為那些未通過 WHERE 檢查的行進行分組和聚集計算。
D. 在資料庫中什麼叫聚集
按照字面理解就差不多了,雖不是嚴謹的定義,但如下理解也夠用了。
聚集就是匯總一批細節數據,形成一個粗獷數據,說得有營養點兒,稱作「濃縮」也湊乎。
與之連用的是聚集函數,SQL標准提到了五個,分別是count、sum、avg、min、max,其中count就是不管細節的各條記錄是什麼樣子,給點個記錄總數,另外四個也是不管精緻的數據是什麼,求出籠統的總和、算術平均值、最小值、最大值,有的資料庫還擴充了標准方差、協方差等聚集函數以支持更多的分析需求。
E. 資料庫查詢,關於聚合函數 max()的用法。
MAX()/MIN()是指SQL中的最大/最小值函數
因為聚合函數處理的是數據組,在本例中,MAX函數將整個TEACHER表看成一組
而TNAME、DNAME和TSEX的數據都沒有進行任何分組,因此SELECT語句沒有邏輯意義
MAX()和MIN()函數不僅可以作用於數值型數據,也可以作用於字元串或是日期時間數據類型的數據。
SQL 如下:
實例MAX()函數用於字元型數據
如下面代碼:
SELECT MAX (a) AS MAXNAME
FROMA
F. sql聚合函數有哪些
聚集函數
和大多數其它關系資料庫產品一樣,PostgreSQL
支持聚集函數。一個聚集函數從多個輸入行中計算出一個結果。比如,我們有在一個行集合上計算
count(數目),
sum(總和),
avg(均值),
max(最大值),
min(最小值)的函數。
比如,我們可以用下面的語句找出所有低溫中的最高溫度:
SELECT
max(temp_lo)
FROM
weather;
max
-----
46
(1
row)如果我們想知道該讀數發生在哪個城市,可能會用:
SELECT
city
FROM
weather
WHERE
temp_lo
=
max(temp_lo);
--
錯!不過這個方法不能運轉,因為聚集函數
max
不能用於
WHERE
子句中。存在這個限制是因為
WHERE
子句決定哪些行可以進入聚集階段;因此它必需在聚集函數之前計算。不過,我們可以用其它方法實現這個目的;這里我們使用子查詢:
SELECT
city
FROM
weather
WHERE
temp_lo
=
(SELECT
max(temp_lo)
FROM
weather);
city
---------------
San
Francisco
(1
row)這樣做是可以的,因為子查詢是一次獨立的計算,它獨立於外層查詢計算自己的聚集。
聚集同樣也常用於
GROUP
BY
子句。比如,我們可以獲取每個城市低溫的最高值:
SELECT
city,
max(temp_lo)
FROM
weather
GROUP
BY
city;
city
|
max
---------------+-----
Hayward
|
37
San
Francisco
|
46
(2
rows)這樣每個城市一個輸出。每個聚集結果都是在匹配該城市的行上面計算的。我們可以用
HAVING
過濾這些分組:
SELECT
city,
max(temp_lo)
FROM
weather
GROUP
BY
city
HAVING
max(temp_lo)
<
40;
city
|
max
---------+-----
Hayward
|
37
(1
row)這樣就只給出那些
temp_lo
值曾經有低於
40
度的城市。最後,如果我們只關心那些名字以"S"開頭的城市,我們可以用:
SELECT
city,
max(temp_lo)
FROM
weather
WHERE
city
LIKE
'S%'
GROUP
BY
city
HAVING
max(temp_lo)
<
40;語句中的
LIKE
執行模式匹配,在節9.7里有解釋。
理解聚集和
SQL
的
WHERE
和
HAVING
子句之間的關系非常重要。WHERE
和
HAVING
的基本區別如下:WHERE
在分組和聚集計算之前選取輸入行(它控制哪些行進入聚集計算),而
HAVING
在分組和聚集之後選取輸出行。因此,WHERE
子句不能包含聚集函數;因為試圖用聚集函數判斷那些行將要輸入給聚集運算是沒有意義的。相反,HAVING
子句總是包含聚集函數。當然,你可以寫不使用聚集的
HAVING
子句,但這樣做沒什麼好處,因為同樣的條件可以更有效地用於
WHERE
階段。
在前面的例子里,我們可以在
WHERE
里應用城市名稱限制,因為它不需要聚集。這樣比在
HAVING
里增加限制更加高效,因為我們避免了為那些未通過
WHERE
檢查的行進行分組和聚集計算。
G. 關於sql聚集函數的正確描述是
SQL允許定義函數、過程和方法。定義可通過SQL的有關過程的組件,也可以通過外部的程序設計語言,如Java,C或C++。SQL標准所定義的語法,與大多數資料庫實現的自身的非標准版本的語法不同。函數和過程允許「業務邏輯」作為存儲過程記錄在資料庫中,並在資料庫中執行。
求和函數SUM( )用於對數據求和,返回選取結果集中所有值的總和。語法如下。
SELECT SUM(column_name)
FROM table_name
說明:SUM()函數只能作用於數值型數據,即列column_name中的數據必須是數值型的。
(7)資料庫聚集函數擴展閱讀:
理解聚集和SQL的 WHERE 以及 HAVING 子句之間的關系對我們非常重要。 WHERE 和 HAVING 的基本區別如下: WHERE 在分組和聚集計算之前選取輸入行(因此,它控制哪些行進入聚集計算), 而 HAVING 在分組和聚集之後選取分組的行。因此,WHERE 子句不能包含聚集函數; 因為試圖用聚集函數判斷那些行輸入給聚集運算是沒有意義的。
相反,HAVING 子句總是包含聚集函數。 (嚴格說來,你可以寫不使用聚集的 HAVING 子句, 但這樣做只是白費勁。同樣的條件可以更有效地用於 WHERE 階段。)
H. 聚集函數是什麼
和大多數其它關系資料庫產品一樣, PostgreSQL 支持聚集函數。 一個聚集函數從多個輸入行中計算出一個結果。 比如,我們有在一個行集合上計算 count(數目), sum(和),avg(均值), max(最大值)和min(最小值)的函數。
比如,我們可以用下面的語句找出所有記錄中低溫中的最高溫度
SELECT max(temp_lo) FROM weather;
max----- 46(1 row)
如果我們想知道該讀數發生在哪個城市,我們可以用
SELECT city FROM weather WHERE temp_lo = max(temp_lo); WRONG不過這個方法不能運轉,因為聚集 max 不能用於 WHERE 子句中。 (存在這個限制是因為 WHERE 子句決定哪些行可以進入聚集階段;因此它必需在聚集函數之前計算。) 不過,我們通常都可以用其它方法實現我們的目的;這里我們就可以使用子查詢:
SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
city--------------- San Francisco(1 row)這樣做是 OK 的,因為子查詢是一次獨立的計算,它獨立於外層的查詢計算出自己的聚集。
聚集同樣也常用於 GROUP BY 子句。比如, 我們可以獲取每個城市低溫的最高值
SELECT city, max(temp_lo) FROM weather GROUP BY city;
city | max--------------- ----- Hayward | 37 San Francisco | 46(2 rows)這樣給我們每個城市一個輸出。 每個聚集結果都是在匹配該城市的行上面計算的。 我們可以用 HAVING 過濾這些分組:
SELECT city, max(temp_lo) FROM weather GROUP BY city HAVING max(temp_lo) < 40;
city | max--------- ----- Hayward | 37(1 row)這樣就只給出那些 temp_lo 數值曾經有低於 40 度溫度的城市。 最後,如果我們只關心那些名字以 "S" 開頭的城市,我們可以用
SELECT city, max(temp_lo) FROM weather WHERE city LIKE 'S%'(1) GROUP BY city HAVING max(temp_lo) < 40; LIKE 做模式匹配,在 Section 里有解釋。
理解聚集和SQL的 WHERE 以及 HAVING 子句之間的關系對我們非常重要。 WHERE 和 HAVING 的基本區別如下: WHERE 在分組和聚集計算之前選取輸入行(因此,它控制哪些行進入聚集計算), 而 HAVING 在分組和聚集之後選取分組的行。 因此,WHERE 子句不能包含聚集函數; 因為試圖用聚集函數判斷那些行輸入給聚集運算是沒有意義的。 相反,HAVING 子句總是包含聚集函數。 (嚴格說來,你可以寫不使用聚集的 HAVING 子句, 但這樣做只是白費勁。同樣的條件可以更有效地用於 WHERE 階段。)
I. sql 聚合函數有哪些
聚合函數是對一組值執行計算並返回單一的值的函數,它經常與SELECT語句的GROUP BY子句一同使用,SQL SERVER 中具體有哪些聚合函數呢?我們來一一看一下:
1. AVG 返回指定組中的平均值,空值被忽略。
例:select prd_no,avg(qty) from sales group by prd_no
2. COUNT 返回指定組中項目的數量。
例:select count(prd_no) from sales
3. MAX 返回指定數據的最大值。
例:select prd_no,max(qty) from sales group by prd_no
4. MIN 返回指定數據的最小值。
例:select prd_no,min(qty) from sales group by prd_no
5. SUM 返回指定數據的和,只能用於數字列,空值被忽略。
例:select prd_no,sum(qty) from sales group by prd_no
6. COUNT_BIG 返回指定組中的項目數量,與COUNT函數不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。
例:select count_big(prd_no) from sales
7. GROUPING 產生一個附加的列,當用CUBE或ROLLUP運算符添加行時,輸出值為1.當所添加的行不是由CUBE或ROLLUP產生時,輸出值為0.
例:select prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup
8. BINARY_CHECKSUM 返回對表中的行或表達式列表計算的二進制校驗值,用於檢測表中行的更改。
例:select prd_no,binary_checksum(qty) from sales group by prd_no
9. CHECKSUM_AGG 返回指定數據的校驗值,空值被忽略。
例:select prd_no,checksum_agg(binary_checksum(*)) from sales group by prd_no
10. CHECKSUM 返回在表的行上或在表達式列表上計算的校驗值,用於生成哈希索引。
11. STDEV 返回給定表達式中所有值的統計標准偏差。
例:select stdev(prd_no) from sales
12. STDEVP 返回給定表達式中的所有值的填充統計標准偏差。
例:select stdevp(prd_no) from sales
13. VAR 返回給定表達式中所有值的統計方差。
例:select var(prd_no) from sales
14. VARP 返回給定表達式中所有值的填充的統計方差。
例:select varp(prd_no) from sales
J. 資料庫聚集函數如何設置
常用的聚合函數
1 count 2 sum 3 avg 4 max 5 min
使用規范時 默認的是all
distinct 指定所有的唯一非空值行
count (行的數目)
select count ( 列或者*) from 表
sum (總和)
select sum(計數規范)from
分組 (group by)
select 列a , 聚合函數 from 表 where 過濾條件 group by 列a (以列a來分組)
過濾聚合函數(having)
select 列a , 聚合函數 from 表 where 過濾條件 group by 列a having 聚合函數過濾條件
要注意的是 SQL語句的執行順序
(5)select 列a , 聚合函數 (1) from 表 (2) where 過濾條件 (3) group by 列a (4) having 聚合函數過濾條件 (6) order by