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;