ID(主键)、NF(年份)、XM(姓名)、Score(得分)、HZ_AVG(汇总平均分)
1 2000 zhangsan 80 NULL
2 2000 lisi 90 NULL
3 2000 wangwu 70 NULL
4 2011 libai 89 NULL
5 2011 dufu 97 NULL
现在要对不同年份的得分求平均值,应该怎样计算???
然后还要将计算的结果写入第一个年份记录对应的字段中,应该怎样操作???
在这个例子中,比如:求“2000”年“得分”的“平均值”,然后将“平均值”写入年份是“2000”的记录中的第一条,它的HZ_AVG(汇总平均分字段中)。在这里就是写入第一条“zhangsan”对应的“HZ_AVG”中,第二、三条记录,也就是“lisi”、“wangwu”对应的“HZ_AVG”依然为空。
这样的功能应该怎样实现???用SQL语句能不能实现???
小弟的思路:
检索该表中的每一条记录,取记录中的“年份”。再根据年份,查询表返回结果集。对结果集进行判断看是不是记录数大于一,如果大于一那么对记录集中的“得分”求平均分,然后写入该记录的“汇总平均分”中。否则那么直接将“得分”写入“汇总平均分”。
小弟的方法可能效率有点低,各位大侠还有其它什么方法吗???
21 个解决方案
#1
我猜这个帖子你肯定不会结的,所以就算是我知道我也不告诉你
#2
avg
#3
+1
#4
avg + group by
#5
avg查询平均值
#6
SELECT AVG(X.LOAN_AMT) AVG_, TO_CHAR(X.LOAN_DATE, 'yyyy)LOAN_DATE_
FROM FINANCE_LOAN X
GROUP BY TO_CHAR(X.LOAN_DATE, 'yyyy')
用AVG和GROUP BY一起用就可以啦。
FROM FINANCE_LOAN X
GROUP BY TO_CHAR(X.LOAN_DATE, 'yyyy')
用AVG和GROUP BY一起用就可以啦。
#7
帖子肯定会结的,只是时间确实又点紧。
都是分批结的啊,不信可以问问大家。
#8
能不能详细一点呢???
#9
;with cte1 as
(
--假设你所说的第一条是指按ID升序排列
select MIN(ID) AS 'ID',AVG(Score) AS 'HZ_ZVG' from Manager where group by NF
),
update Manager set HZ_AVG=cte1.HZ_ZVG where ID=cte1.ID
#10
多写了个where
#11
AVG 函数
#12
谢谢,自己先试试,帖子一会结。
#13
路过拿分,发现9楼方法非常巧妙,学习了
#14
这是什么写法呢??? “with” ??? as () , update Manager set
#15
mark
#16
LZ,看看这个。
with cte1 as
(
select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' from KH_SubCompManager where nf='2011' group by BH
),
update KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH
with cte1 as
(
select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' from KH_SubCompManager where nf='2011' group by BH
),
update KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH
#17
+1
#18
楼主,不知问题解决没?我可以帮你写个,如果需要的话留言啊!
#19
用存储过程或是游标都可以的,需要的话留言给我。
#20
avg查询平均值
#21
方案已经给你写好了,游标实现的,数据可名字改成你的就好了,最后记得顶一下,给加个分哦。
USE Sales_DB
DECLARE Del_Cursor CURSOR
FOR
SELECT MIN(ID)AS 'ID',AVG(Score) AS 'HZ_AVG' FROM T_test GROUP BY NF
OPEN Del_Cursor
DECLARE @id int,@hz int
FETCH NEXT FROM Del_Cursor INTO @id,@hz
WHILE(@@fetch_status=0)
BEGIN
BEGIN
UPDATE T_test SET HZ_AVG=@hz WHERE ID=@id
FETCH NEXT FROM Del_Cursor INTO @id,@hz
PRINT '成功!'
END
END
CLOSE Del_Cursor
DEALLOCATE Del_Cursor
USE Sales_DB
DECLARE Del_Cursor CURSOR
FOR
SELECT MIN(ID)AS 'ID',AVG(Score) AS 'HZ_AVG' FROM T_test GROUP BY NF
OPEN Del_Cursor
DECLARE @id int,@hz int
FETCH NEXT FROM Del_Cursor INTO @id,@hz
WHILE(@@fetch_status=0)
BEGIN
BEGIN
UPDATE T_test SET HZ_AVG=@hz WHERE ID=@id
FETCH NEXT FROM Del_Cursor INTO @id,@hz
PRINT '成功!'
END
END
CLOSE Del_Cursor
DEALLOCATE Del_Cursor
#1
我猜这个帖子你肯定不会结的,所以就算是我知道我也不告诉你
#2
avg
#3
+1
#4
avg + group by
#5
avg查询平均值
#6
SELECT AVG(X.LOAN_AMT) AVG_, TO_CHAR(X.LOAN_DATE, 'yyyy)LOAN_DATE_
FROM FINANCE_LOAN X
GROUP BY TO_CHAR(X.LOAN_DATE, 'yyyy')
用AVG和GROUP BY一起用就可以啦。
FROM FINANCE_LOAN X
GROUP BY TO_CHAR(X.LOAN_DATE, 'yyyy')
用AVG和GROUP BY一起用就可以啦。
#7
帖子肯定会结的,只是时间确实又点紧。
都是分批结的啊,不信可以问问大家。
#8
能不能详细一点呢???
#9
;with cte1 as
(
--假设你所说的第一条是指按ID升序排列
select MIN(ID) AS 'ID',AVG(Score) AS 'HZ_ZVG' from Manager where group by NF
),
update Manager set HZ_AVG=cte1.HZ_ZVG where ID=cte1.ID
#10
多写了个where
#11
AVG 函数
#12
谢谢,自己先试试,帖子一会结。
#13
路过拿分,发现9楼方法非常巧妙,学习了
#14
这是什么写法呢??? “with” ??? as () , update Manager set
#15
mark
#16
LZ,看看这个。
with cte1 as
(
select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' from KH_SubCompManager where nf='2011' group by BH
),
update KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH
with cte1 as
(
select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' from KH_SubCompManager where nf='2011' group by BH
),
update KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH
#17
+1
#18
楼主,不知问题解决没?我可以帮你写个,如果需要的话留言啊!
#19
用存储过程或是游标都可以的,需要的话留言给我。
#20
avg查询平均值
#21
方案已经给你写好了,游标实现的,数据可名字改成你的就好了,最后记得顶一下,给加个分哦。
USE Sales_DB
DECLARE Del_Cursor CURSOR
FOR
SELECT MIN(ID)AS 'ID',AVG(Score) AS 'HZ_AVG' FROM T_test GROUP BY NF
OPEN Del_Cursor
DECLARE @id int,@hz int
FETCH NEXT FROM Del_Cursor INTO @id,@hz
WHILE(@@fetch_status=0)
BEGIN
BEGIN
UPDATE T_test SET HZ_AVG=@hz WHERE ID=@id
FETCH NEXT FROM Del_Cursor INTO @id,@hz
PRINT '成功!'
END
END
CLOSE Del_Cursor
DEALLOCATE Del_Cursor
USE Sales_DB
DECLARE Del_Cursor CURSOR
FOR
SELECT MIN(ID)AS 'ID',AVG(Score) AS 'HZ_AVG' FROM T_test GROUP BY NF
OPEN Del_Cursor
DECLARE @id int,@hz int
FETCH NEXT FROM Del_Cursor INTO @id,@hz
WHILE(@@fetch_status=0)
BEGIN
BEGIN
UPDATE T_test SET HZ_AVG=@hz WHERE ID=@id
FETCH NEXT FROM Del_Cursor INTO @id,@hz
PRINT '成功!'
END
END
CLOSE Del_Cursor
DEALLOCATE Del_Cursor