1. sql server中什麼是聚合函數
count() 所有記錄數
count(*)所有非null記錄數
avg() 某一列平均值
min() 某一列最小值
max() 某一列最大值
sum() 某一列總和
2. 在SQL中的聚合函數
原則上,你要用group by,那麼前面抽取的欄位必須要作為分組依據,否則就需要sum,avg,max等函數的處理。
3. 所有的sql聚合函數的應用例題 謝謝
1、數值型常用函數函數返回值樣例顯示
ceil(n) 大於或等於數值n的最小整數select ceil(10.6) from al; 11
floor(n) 小於等於數值n的最大整數 select ceil(10.6) from al; 10
mod(m,n) m除以n的余數,若n=0,則返回m select mod(7,5) from al; 2
power(m,n) m的n次方 select power(3,2) from al; 9
round(n,m) 將n四捨五入,保留小數點後m位select round(1234.5678,2) from al; 1234.57
sign(n) 若n=0,則返回0,否則,n>0,則返回1,n<0,則返回-1 select sign(12) from al; 1
sqrt(n) n的平方根select sqrt(25) from al ; 5
2、常用字元函數
initcap(char) 把每個字元串的第一個字元換成大寫select initicap('mr.ecop') from al; Mr.Ecop
lower(char) 整個字元串換成小寫select lower('MR.ecop') from al; mr.ecop
replace(char,str1,str2) 字元串中所有str1換成str2 select replace('Scott','s','Boy') from al; Boycott
substr(char,m,n) 取出從m字元開始的n個字元的子串select substr('ABCDEF',2,2) from al; CD
length(char) 求字元串的長度select length('ACD') from al; 3
|| 並置運算符 select 'ABCD'||'EFGH' from al; ABCDEFGH
3、日期型函數
sysdate 當前日期和時間 select sysdate from al;
last_day 本月最後一天 select last_day(sysdate) from al;
add_months(d,n)當前日期d後推n個月 select add_months(sysdate,2) from al;
months_between(d,n) 日期d和n相差月數 select months_between(sysdate,to_date('20020812','YYYYMMDD')) from al;
next_day(d,day) d後第一周指定day的日期 select next_day(sysdate,'Monday') from al;
day 格式有'Monday' 星期一'Tuesday' 星期二
'wednesday' 星期三 'Thursday' 星期四 'Friday' 星期五
'Saturday' 星期六 'Sunday' 星期日
4、特殊格式的日期型函數
Y或YY或YYY 年的最後一位,兩位,三位 select to_char(sysdate,'YYY') from al;
Q 季度,1-3月為第一季度select to_char(sysdate,'Q') from al;
MM 月份數select to_char(sysdate,'MM') from al;
RM 月份的羅馬表示 select to_char(sysdate,'RM') from al; IV
month 用9個字元表示的月份名 select to_char(sysdate,'month') from al;
ww 當年第幾周select to_char(sysdate,'ww') from al;
w 本月第幾周select to_char(sysdate,'w') from al;
DDD 當年第幾天,一月一日為001 ,二月一日032 select to_char(sysdate,'DDD') from al;
DD 當月第幾天 select to_char(sysdate,'DD') from al;
D 周內第幾天 select to_char(sysdate,'D') from al; 如sunday
DY 周內第幾天縮寫select to_char(sysdate,'DY') from al; 如sun
hh12 12小時制小時數select to_char(sysdate,'hh12') from al;
hh24 24小時制小時數select to_char(sysdate,'hh24') from al;
Mi 分鍾數 select to_char(sysdate,'Mi') from al;
ss 秒數 select to_char(sysdate,'ss') from al;
select to_char(sysdate,'YYYY-MM-DD HH:24:mi:ss') from a;to_number() 將合法的數字字元串 select to_number('88877') from al; 88877
to_char() 將數字轉換為字元串 select to_char(88877) from al; '88877'set serveroupt on;
dbms_output.put_line('hello world')set heading off 由於正在創建數據文件,不需要表頭
set pagesize 0 不需要分頁
set linesize 80 設置行的最大尺寸
set echo off 告訴sql plus 在執行語句時,不要回顯語句
set feedback off 禁止sql plus 顯示有多少滿足查詢的行被檢索到
col sales format 999,999,999
append 添加文本到當前行尾
change/old/new/ 在當前行用新的文本代替舊的文本
change/text 從當前行刪除wenb
del 刪除當前行
input text 在當前行之後添加一行
list 顯示緩沖區中的所有行
list n 顯示緩沖區中的第n行
list m n 顯示m到n
5、字元函數
--------------------------------------------------------------------------------
字元函數主要用於修改字元列。這些函數接受字元輸入,返回字元或數字值。Oracle 提供的一些字元函數如下。
1. CONCAT (char1, char2)
返回連接「char2」的「char1」。
示例 SELECT CONCAT( CONCAT(ename, ' is a '), job) FROM emp;
2. INITCAP(string)
將「string」的字元轉成大寫。
示例 Select INITCAP(ename) from emp;
3. LOWER (string)
將「string」轉成小寫。
示例 Select LOWER(ENAME) from emp;
4. LPAD(char1,n [,char2])
返回「char1」,左起由「char2」中的字元補充到「n」個字元長。如果「char1」比「n」長,則函數返回「char1」的前「n」個字元。
示例 SELECT LPAD(ename,15,'*') FROM emp;
5. LTRIM(string,trim_set)
從左邊刪除字元,此處「string」是資料庫的列,或者是字面字元串,而「trim_set」 是我們要去掉的字元的集合。
示例 SELECT LTRIM('abcdab','a') FROM DUAL;
6. REPLACE(string, if, then)
用 0 或其他字元代替字元串中的字元。「if」是字元或字元串,對於每個出現在「string」中的「if」,都用「then」的內容代替。
示例 SELECT REPLACE('JACK and JUE','J','BL') FROM DUAL;
7. RPAD(char1, n [,char2])
返回「char1」,右側用「char2」中的字元補充到「n」個字元長。如果 「char1」比「n」 長,則函數返回「char1」的前「n」個字元。
示例 SELECT RPAD(ename,15,'*') FROM emp;
8. RTRIM(string,trim_set)
從右側刪除字元,此處「string」是資料庫的列,或者是字面字元串,而「trim_set」 是我們要去掉的字元的集合。
示例 SELECT RTRIM('abcdef', 'f') FROM DUAL;
9. SOUNDEX(char)
返回包含「char」的表意字元的字元串。它允許比較英語中拼寫不同而發音類似的字。
示例 SELECT ename FROM emp
WHERE SOUNDEX(ename) = SoUNDEX('SMYTHE');
10. SUBSTR(string, start [,count])
返回「string」中截取的一部分。該命令截取「string」的一個子集,從「start」位置開始,持續「count」個字元。如果我們不指定「count」,則從「start」開始截取到「string」的尾部。
示例 SELECT SUBSTR('ABCDEFGIJKLM',3,4) FROM DUAL;
11. TRANSLATE(string, if, then)
「if」中字元的位置,並檢查「then」的相同位置,然後用該位置的字元替換 「string」中的字元。
示例 SELECT TRANSLATE(ename,'AEIOU', 'XXXXX') FROM emp;
12. UPPER(string)
返回大寫的「string」。
示例 SELECT UPPER('aptech computer ecation') FROM al;
13. ASCII(string)
該命令是「American Standard Code for Information Interchange」的縮寫。它是使用數字表示可列印字元的基本規則。該函數返回 「string」中第一個(最左邊)字元的 ASCII 值。
示例 SELECT ASCII('APTECH') from al;
14. INSTR (string, set[, start[, occurrence] ] )
該命令「string」中從「start」位置開始查找字元集合的位置,再查找「set」出現的第一次、第二次等等的「occurrence」(次數)。「start」的值也可以是負數,代表從字元串結尾開始向反方向搜索。該函數也用於數字和日期數據類型。
示例 SELECT INSTR('aptech is aptech','ap',1,2) FROM DUAL;
15. LENGTH(string)
返回「string」的長度值。
示例 SELECT ename, LENGTH(ename) FROM emp
WHERE empno = 7698;
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lihan6415151528/archive/2009/08/06/4417974.aspx
4. 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
檢查的行進行分組和聚集計算。
5. SQL:將聚合函數的值賦給單獨一列
update 表 t1 set A =
(select count(*)
from 表 t2
where t2.name=t1.name
and t2.birthday=t1.birthday
group by name,birthday);
---
以上,希望對你有所幫助。
6. 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
7. SQL Server中的聚合函數有哪些
SQL Server中的聚合函數有:
1.count() 所有記錄數
2.count(*)所有非null記錄數
3.avg() 某一列平均值
4.min() 某一列最小值
5.max() 某一列最大值
6.sum() 某一列總和
使用方法:
1. SELECT COUNT(欄位1) FROM 表A 統計欄位1在表A中出現的次數
2. SELECT 學號,SUM(各科成績) FROM student GROUP BY 學號 用來根據統計學生的總成績
8. sql聚合函數的應用
我們知道資料庫通常包含大量數據,要從海量的數據中找到我們需要的某條記錄無異於大海撈針,不過通過SQL語言我們可以找到很多方法從資料庫中提取我們要查找的特定數據,就是通過這些方法我們才能找到「列舉出七八兩個月中購買了西伯利亞羊毛的所有顧客的姓名」這類問題的答案。很多時候,我們還希望能夠通過對數據進行分析,總結出規律和趨勢或生成高水平的報表。例如,對於采購經理來說,他可能對所有銷售出去的產品清單不感興趣,而只是想要知道這個月產品的銷售量。SQL提供了聚合函數(aggregate functions)功能來支持對大量數據進行總結的操作。本文我們將具體來看看這些函數的功能和用法,包括添加數據和計算平均值的函數、對符合特定標準的記錄進行計數的函數,以及找出表中最大值和最小值的函數。我們將使用下文所示的ProctOrder表來執行我們所有的查詢。注意,這個表並沒有標准化,而是將幾個數據實體聯合到一個表中,這樣做是為了簡化條件方便說明。如果要設計較好的關系資料庫,應當把這些內容至少分成三個關聯表Procts、Orders和Customers。訂單號 客戶名 客戶姓 數量 單價 所在地 122 John Jacob 21 4.52 北美洲 923 Ralph Wiggum 192 3.99 北美洲 238 Ryan Johnson 87 4.49 非洲 829 Mary Smith 842 2.99 北美洲 824 Elizabeth Marks 48 3.48 非洲 753 James Linea 9 7.85 北美洲 942 Alan Jonas 638 3.29 歐洲 我們先從SUM函數開始。這個函數通常在SELECT語句中使用,返回系列值的總數。假設產品項目經理想了解目前為止商品的總銷售額,那麼我們可以使用以下的查詢腳本:SELECT SUM(數量) AS 總數 FROM ProctOrders 執行語句將返回以下結果: Total ----------- 1837 AVG函數(平均函數)使用方法和SUM類似,它給我們提供系列值的算術平均數。這次我們可以嘗試稍微復雜點的任務:找出北美洲大陸所有訂單的金額平均值。注意,我們需要將「數量」列和「單價」列相乘計算出每張訂單的金額總數。查詢腳本如下: http://database.ctocio.com.cn/tips/116/8051116.shtml
9. SQL Server 中如何使用聚合函數
根據我的使用經驗,聚合函數主要是做統計用的,有以下兩種形式比較常見:
1. SELECT COUNT(欄位1) FROM 表A 統計欄位1在表A中出現的次數
2. SELECT 學號,SUM(各科成績) FROM student GROUP BY 學號 用來根據統計學生的總成績
10. sql語句中如何將聚合函數值和另一個值相乘
sql中提供的聚合函數,通常包括sum,count,avg,max,min,但不包括乘法;
比如有這樣一個數據集:
id x
1 1
1 2
1 3
2 4
2 5
2 6
;
想實現成如下形式
id prob_x
1 6
2 120
即讓第一組中1*2*3=6
第二組中4*5*6=120
用data步中first+retain可以實現,但data需要先排序;
而sql的聚合函數中也沒有相乘這一函數,於是有些牛人想到通過數學轉化,將乘法轉為加法,而sql中可以
用sum實現加法聚合。
說來也簡單,主要想法就是A*B=exp(lnA*B)=exp(lnA+lnB);
select id,exp(sum(log(x))) as prob_x from data_set group by id;
=============================================
但我覺得也需要補充一點東西:
首先有0的情況下,log函數的定義域為{x>0},有0出現的時候,改組最後結果肯定為0;
其次是有負數的情況,需要對絕對值進行計算,計算每組負數的個數,如果負數是偶數個,那麼結果為正,
如果為奇數個,則需要在結果上添上負號。
最後可以寫成這樣
select id,(case when sum(case when x=0 then 1 else 0 end) >0 then 0
when mod(sum(case when x<0 then 1 else 0 end),2)=0 then exp(sum(log(x)))
else -1*exp(sum(log(abs(x)))) end) as prod_x from data_set group by id;