SQL语句优化-关于分组求平均值 20

SELECTA.帐户号,SUM(钱)/(SELECTCOUNT(*)FROM(SELECT月FROM账单AWHEREA.帐户号=1111ANDGROUPBY月))AS月平... SELECT A.帐户号,SUM(钱)/(SELECT COUNT(*) FROM (SELECT 月 FROM 账单 A WHERE A.帐户号=1111 AND GROUP BY 月)) AS 月平均消费 FROM 账单 A WHERE A.帐户号=1111 GROUP BY A.帐户号

以上求的是无数年里平均每月花多少钱
谁能优化一下,不这么复杂?
是ORACLE的。忘了说。
展开
 我来答
chenjin99
推荐于2018-05-06 · TA获得超过7061个赞
知道大有可为答主
回答量:1304
采纳率:100%
帮助的人:1874万
展开全部
试试我写的这个呢:

select 帐户号,avg(月消费) as 月均消费
from (select 帐户号,月,sum(钱) as 月消费
from 账单 group by 帐户号,月) as 月汇总表
where 帐户号=1111
group by 帐户号

思路就是:先查出一个月汇总表,再从此数据集中用Avg()函数,当然不用Avg()函数的话换成 “sum(月消费)/count(月) as 月均消费” 也行。

要注意:AVG、COUNT、MAX 和 MIN 忽略空值,而 COUNT(*) 不忽略。

GoodLuck!
sniper2003
2010-05-12 · TA获得超过1882个赞
知道小有建树答主
回答量:775
采纳率:100%
帮助的人:661万
展开全部
select A.帐户号, datepart(m, 消费日期), sum(钱) from 账单 A group by A.帐户号, datepart(m, 消费日期)

如果要以月份显示在前面,只需要将group by中的两个条件颠倒一下即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
环柏0T
2010-05-12 · TA获得超过231个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:245万
展开全部
--> 生成测试数据表:这种就是计算有消费日期的月的月平均消费一种算法
IF OBJECT_ID('[账单]') IS NOT NULL
DROP TABLE [账单]
CREATE TABLE 账单
( 帐户号 char(10),消费日期 DATETIME,
钱 FLOAT,
)
INSERT INTO 账单
SELECT '1111','2009-01-03',1254 UNION ALL
SELECT '1111','2010-03-02',2345 UNION ALL
SELECT '1111','2010-05-25',20

SELECT A.帐户号,SUM(钱)/( COUNT(DISTINCT datepart(m, 消费日期))) AS 月平均消费 FROM 账单 A WHERE A.帐户号=1111 GROUP BY A.帐户号
--> 生成测试数据表:这种就是计算从最早消费月到最近消费月的月平均消费一种算法
IF OBJECT_ID('[账单]') IS NOT NULL
DROP TABLE [账单]
CREATE TABLE 账单
( 帐户号 char(10),消费日期 DATETIME,
钱 FLOAT,
)
INSERT INTO 账单
SELECT '1111','2009-01-03',1254 UNION ALL
SELECT '1111','2010-03-02',2345 UNION ALL
SELECT '1111','2010-05-25',20
SELECT A.帐户号,SUM(钱)/(datediff(mm,min(消费日期),max(消费日期))) AS 月平均消费 FROM 账单 A WHERE A.帐户号=1111 GROUP BY A.帐户号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式