当前位置:首页 » 编程语言 » sql语句聚合函数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql语句聚合函数

发布时间: 2023-07-19 09:40:26

sql server中什么是聚合函数

count() 所有记录数
count(*)所有非null记录数
avg() 某一列平均值

min() 某一列最小值
max() 某一列最大值
sum() 某一列总和

② sql 语句中那些是聚合函数

常见聚合函数,max(最大)、min(最小)、sum(求和)、avg(平均)等,

示例如下,

1、创建测试表,

create table test_group(id number, value number);

③ 为什么sql查询语句中的count(*)等聚合函数可以放在having后面,而不能放在where后面

因为where先于group by执行,当执行where的时候还没有分组,没有东西可以数,所以聚合函数只能放在比group by先执行的指令里

④ sql语句中group by,聚合函数的使用。单行子查询返回多行怎么办求解答!

两个办法。
(1)联合查询(oracle写法,如为其他数据库自行修改,这里只提供思路)
select table.id,table.XXXXX,table.XXXXX,table.caption,table.XXXXX from table,(select id,max(caption) max_cap from table group by id) b where table.id=b.id and table.caption=b.max_cap
(2)组合查询
select * from table where id||'_'||caption in (select id||'_'||max(caption) max_cap from table group by id)
加_是为了方防止出现特殊情况,比如id=1,caption=130 和id=11,caption=30的情况出现
不知道你是什么数据库,||是Oracle的连接符,用于连接字符串,其他数据库应该也有类似的东西,这个就自己掌握吧

⑤ SqlServer如何用Sql语句自定义聚合函数

有两个写法:

select*fromtblDept
whereidin(
count(casewhenSalary>3000then1elsenullend)*1.0/count(*)>0.5)

select*fromtblDept
whereidin(
sum(casewhenSalary>3000then1else0end)*1.0/count(*)>0.5)

⑥ sql中常用的聚合函数有哪些(sql聚合函数)

聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUPBY子句一同使用,SQLSERVER中具体有哪些聚者正合函数呢?我们来一一看一下:

1.AVG返回指定组中的平均值,空值被忽略。

例:selectprd_no,avg(qty)fromsalesgroupbyprd_no

2.COUNT返回指定组中项目的数量。

例:selectcount(prd_no)fromsales

3.MAX返回指定数据的最大值。

例:selectprd_no,max(qty)fromsalesgroupbyprd_no

4.MIN返回指定数据的最小值。

例:selectprd_no,min(qty)fromsalesgroupbyprd_no

5.SUM返回指定数据的和,只能用于数字列,空值被忽略。

例:selectprd_no,sum(qty)fromsalesgroupbyprd_no

6.COUNT_BIG返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返型顷回的是int值。

例:selectcount_big(prd_no)fromsales

7.GROUPING产生一个附加的列,当用CUBE或ROLLUP运算符添加行时,输出值为1.当所添加的行不是由CUBE或ROLLUP产生时,输出值为0.

例:selectprd_no,sum(qty),grouping(prd_no)fromsalesgroupbyprd_nowithrollup

8.BINARY_CHECKSUM返回对表中的行或表达式列表计卜嫌陆算的二进制校验值,用于检测表中行的更改。

例:selectprd_no,binary_checksum(qty)fromsalesgroupbyprd_no

9.CHECKSUM_AGG返回指定数据的校验值,空值被忽略。

例:selectprd_no,checksum_agg(binary_checksum(*))fromsalesgroupbyprd_no

10.CHECKSUM返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。

11.STDEV返回给定表达式中所有值的统计标准偏差。

例:selectstdev(prd_no)fromsales

12.STDEVP返回给定表达式中的所有值的填充统计标准偏差。

例:selectstdevp(prd_no)fromsales

13.VAR返回给定表达式中所有值的统计方差。

例:selectvar(prd_no)fromsales

14.VARP返回给定表达式中所有值的填充的统计方差。

例:selectvarp(prd_no)fromsales

⑦ 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
检查的行进行分组和聚集计算。

⑧ 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;