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的。忘了说。 展开
以上求的是无数年里平均每月花多少钱
谁能优化一下,不这么复杂?
是ORACLE的。忘了说。 展开
3个回答
展开全部
试试我写的这个呢:
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!
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!
展开全部
select A.帐户号, datepart(m, 消费日期), sum(钱) from 账单 A group by A.帐户号, datepart(m, 消费日期)
如果要以月份显示在前面,只需要将group by中的两个条件颠倒一下即可
如果要以月份显示在前面,只需要将group by中的两个条件颠倒一下即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--> 生成测试数据表:这种就是计算有消费日期的月的月平均消费一种算法
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.帐户号
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.帐户号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询