sql聚合函数的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql聚合函数的使用相关的知识,希望对你有一定的参考价值。

有三张表如图,我想通过使用SQL语句列出 姓名,余额(注:所有存款减所有消费)
其中存款表、消费表、资料表的ID号是关联的,该怎么写呢?希望各位大侠指点,谢谢!
我这里的余额的意思是指列出各个人的所有存款-所有消费 比如张三他存款共230消费共100;李四存款共1100,消费共110;那么列出来的就应该是:姓名 余额
张三 130
李四 1090
凤凰M的语句运行结果得到的结果是错误的,无论用左连接或内连接还是用where连接返回都是一样的错误值。fjlhuman 朋友的暂时还没试。等下看看。

应该这样是可以实现的,不过我未测试,你试下!

SELECT A.[姓名]
,B.[存款] - C.[消费] AS [余额]
FROM [资料表] A
,(SELECT [Id]
,SUM([存款]) AS [存款]
FROM [存款表]
GROUP BY [Id]) B
,(SELECT [Id]
,SUM([消费]) AS [消费]
FROM [消费表]
GROUP BY [Id]) C
WHERE A.[Id] = B.[Id]
AND A.[Id] = C.[Id]
AND B.[Id] = C.[Id]

但是对于只有存款而没有消费或者有消费而没有存款的人,这样查询是得到余额的,所以还要修改一下,修改后如下所示即可:

SELECT A.[姓名]
,ISNULL(B.[存款],0) - ISNULL(C.[消费],0) AS [余额]
FROM [资料表] A

LEFT JOIN (SELECT [Id]
,SUM([存款]) AS [存款]
FROM [存款表]
GROUP BY [Id]) B
ON A.[Id] = B.[Id]

LEFT JOIN (SELECT [Id]
,SUM([消费]) AS [消费]
FROM [消费表]
GROUP BY [Id]) C
ON A.[Id] = C.[Id]
AND B.[Id] = C.[Id]
参考技术A SELECT 姓名,
(SUMCUNKUAN.SUMC- SUMXIAOFEI.SUMS ) AS 余额
FROM 资料表
LEFT JOIN IN (SELECT ID,SUM(存款) AS SUMC FROM 存款表 GROUP BY DI ) AS SUMCUNKUAN
ON 资料表.ID=SUMCUNKUAN.ID
LEFT JOIN IN (SELECT ID,SUM(消费) AS SUMS FROM 消费表 GROUP BY DI ) AS SUMXIAOFEI
ON 消费表.ID=SUMXIAOFEI.ID追问

谢谢这位朋友的帮助,但是SUMCUNKUAN 是个什么函数啊,SQL2000好像没这个函数吧,是2005的?

追答

这是虚拟的表明啊 我先吧存款表聚合起来 AS 成SUMCUNKUAN 这个名了啊 这个是名字 自己起的

参考技术B 先对前两个表group by ID,然后对第三个表进行left join

SELECT A.[姓名] , (B.[存款] - C.[消费]) AS [余额]
FROM [资料表] A
LEFT JOIN (SELECT [Id], ISNULL(SUM([存款]),0) AS [存款] FROM [存款表] GROUP BY [Id]) B
ON A.[Id] = B.[Id]
LEFT JOIN (SELECT [Id], ISNULL(SUM([消费]),0) AS [消费] FROM [消费表] GROUP BY [Id]) C
ON A.[Id] = C.[Id]
参考技术C select zl.姓名 as 姓名,sum(ck.存款)-sum(xf.消费) as 余额 from 资料表 zl
left join 存款表 ck on zl.id = ck.id
left join 消费表 xf on zl.id = xf.id
group by zl.id,zl.姓名追问

我去看下先,看样子用内连接也是可以的吧,还有聚合函数好像错了一个字母吧,先谢谢你。

追答

哦,是错了,呵呵,大概思路是这样的,我随便写的,可能有错,你调整调整就好

追问

晕,我试了下也不行,出来的结果是不正确的结果,应该是存款和消费因为连接的关系重复了 存款表*消费表 的次数。

追答

那你用子查询,把ID传到子句里面查结果计算

select zl.姓名 as 姓名,
sum(select ck.存款 from 存款表 ck where ck.id = zl.id)-sum(select xf.消费 from 消费表 xf where xf.id = zl.id ) as 余额
from 资料表 zl

追问

您好,老这么问你我都不太好意思了,这SUM函数括号里还能加子句?我试了下提示语法错误哩。

追答

呵呵,那就用2L的了,他写的链接很有意思的。。

我也是菜鸟一枚啊。。

SQL Server中的聚合函数都有哪些?

请问SQL Server中的聚合函数有哪些?请问ADD聚合函数在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 学号    用来根据统计学生的总成绩

参考技术A 聚合函数count() sum()

count() 汇总个数,sum()汇总总和.比如一个学生表 student, mark(id,score) 成绩表
select count(*) from student --所有同学的个数

select sum(score) from mark --求出所有分数的总和
参考技术B count() 所有记录数
count(*)所有非null记录数
avg() 某一列平均值

min() 某一列最小值
max() 某一列最大值
sum() 某一列总和
参考技术C sum() 求和,例如 select sum(score) where mark
max(),求最大值
min() 求最小值
count(*) 求技术,
根据不同的题目要求,分析出该怎么用?写出语句就可以的啊!

以上是关于sql聚合函数的使用的主要内容,如果未能解决你的问题,请参考以下文章

sql聚合函数的使用

sql server中啥是聚合函数

sql 2005 聚合函数

SQL Server中的聚合函数都有哪些?

SQL Server中的聚合函数都有哪些?

SQL Server聚合函数