假设字段如下:A(Key),B,C,D,E
其中A有10条记录,而B、C、D、E中都可能有空,
我的要求是这样,查询表中所以的数据,并求出B、C、D、E的平均值,而求平均值不能除以10,设B有8个数据,D有6个数据,则B应该除以8,而D除以6!
同时要记录下B、C、D、E各字段中的最大值,最小值。
我目前用到的控件仅有TQuery,我想接收到数据进行其它处理!
最大值、最小值和均值也一样要进行处理,而不是显示出来!
请高手指点,因我是初学者,对此不太了解。书上讲到此时也不太详细。
另外问一下,关于这方面的内容看哪本书最详细!
谢谢啦!
8 个解决方案
#1
可以在程序中计算。
这样:
通过查询同时得到B,C,D中的数据,然后同时计算平均值,计算最大最小值
EG:
... SELECT * FROM B
int Total , ItemsCount = 0 ;
while ( !Query->Eof )
{
if ( Query->FieldByName ( "B" )->AsString != "" )//判断该条是否是有效记录(是不是有值)
{
Total += StrToInt ( Query->FieldByName ( "B" )->AsString ) ;
ItemsCount ++ ;//计算有多少条数据
}
Query->Next () ;
}
Total /= ItemsCount ;//平均值
这样:
通过查询同时得到B,C,D中的数据,然后同时计算平均值,计算最大最小值
EG:
... SELECT * FROM B
int Total , ItemsCount = 0 ;
while ( !Query->Eof )
{
if ( Query->FieldByName ( "B" )->AsString != "" )//判断该条是否是有效记录(是不是有值)
{
Total += StrToInt ( Query->FieldByName ( "B" )->AsString ) ;
ItemsCount ++ ;//计算有多少条数据
}
Query->Next () ;
}
Total /= ItemsCount ;//平均值
#2
谢谢 lilachue(哦)
不过我再问一下,这方面的内容在哪看呀,我现在这方面的资料没有呀!
推荐几本书?
谢谢啦!
不过我再问一下,这方面的内容在哪看呀,我现在这方面的资料没有呀!
推荐几本书?
谢谢啦!
#3
lilachue(哦),我按上面的办法试了一下,出现了问题!
int Total , ItemsCount1 = 0,ItemsCount2 = 0;
while ( !ADOQuery1->Eof )
{
if ( (ADOQuery1->FieldByName ( "AGE" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "AGE" )->AsString!="")
{
// Total += StrToInt ( Query->FieldByName ( "AGE" )->AsString ) ;
ItemsCount1 ++
}
if ( (ADOQuery1->FieldByName ( "BIRTH" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "BIRTH" )->AsString!="") )
{
// Total += StrToInt ( Query->FieldByName ( "BIRTH" )->AsString ) ;
ItemsCount2 ++ ;
}
ADOQuery1->Next () ;
}
结果统计出来的数目是一样的,但我数据表中明显不一样呀!
AGE有空,而BIRTH没有呀!
帮看看嘛!谢谢啦!
int Total , ItemsCount1 = 0,ItemsCount2 = 0;
while ( !ADOQuery1->Eof )
{
if ( (ADOQuery1->FieldByName ( "AGE" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "AGE" )->AsString!="")
{
// Total += StrToInt ( Query->FieldByName ( "AGE" )->AsString ) ;
ItemsCount1 ++
}
if ( (ADOQuery1->FieldByName ( "BIRTH" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "BIRTH" )->AsString!="") )
{
// Total += StrToInt ( Query->FieldByName ( "BIRTH" )->AsString ) ;
ItemsCount2 ++ ;
}
ADOQuery1->Next () ;
}
结果统计出来的数目是一样的,但我数据表中明显不一样呀!
AGE有空,而BIRTH没有呀!
帮看看嘛!谢谢啦!
#4
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from from yourtable ..... "
求值: " select sum(B) bsum from from yourtable ..... "
平均值=jilushu/bsum;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
#5
sorry:
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from from yourtable ..... "
求值: " select sum(B) bsum from from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from from yourtable ..... "
求值: " select sum(B) bsum from from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
#6
sorry again:
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from yourtable ..... "
求值: " select sum(B) bsum from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from yourtable ..... "
求值: " select sum(B) bsum from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
#7
select count(B) from yourtable where b is not null
可以先出你要的分母
select sum(B) from yourtable
可以先出你要的分子
可以先出你要的分母
select sum(B) from yourtable
可以先出你要的分子
#8
select AVG(B) from yourtable 可以直接求平均值吧。
书上这么说,我没用过。
书上这么说,我没用过。
#1
可以在程序中计算。
这样:
通过查询同时得到B,C,D中的数据,然后同时计算平均值,计算最大最小值
EG:
... SELECT * FROM B
int Total , ItemsCount = 0 ;
while ( !Query->Eof )
{
if ( Query->FieldByName ( "B" )->AsString != "" )//判断该条是否是有效记录(是不是有值)
{
Total += StrToInt ( Query->FieldByName ( "B" )->AsString ) ;
ItemsCount ++ ;//计算有多少条数据
}
Query->Next () ;
}
Total /= ItemsCount ;//平均值
这样:
通过查询同时得到B,C,D中的数据,然后同时计算平均值,计算最大最小值
EG:
... SELECT * FROM B
int Total , ItemsCount = 0 ;
while ( !Query->Eof )
{
if ( Query->FieldByName ( "B" )->AsString != "" )//判断该条是否是有效记录(是不是有值)
{
Total += StrToInt ( Query->FieldByName ( "B" )->AsString ) ;
ItemsCount ++ ;//计算有多少条数据
}
Query->Next () ;
}
Total /= ItemsCount ;//平均值
#2
谢谢 lilachue(哦)
不过我再问一下,这方面的内容在哪看呀,我现在这方面的资料没有呀!
推荐几本书?
谢谢啦!
不过我再问一下,这方面的内容在哪看呀,我现在这方面的资料没有呀!
推荐几本书?
谢谢啦!
#3
lilachue(哦),我按上面的办法试了一下,出现了问题!
int Total , ItemsCount1 = 0,ItemsCount2 = 0;
while ( !ADOQuery1->Eof )
{
if ( (ADOQuery1->FieldByName ( "AGE" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "AGE" )->AsString!="")
{
// Total += StrToInt ( Query->FieldByName ( "AGE" )->AsString ) ;
ItemsCount1 ++
}
if ( (ADOQuery1->FieldByName ( "BIRTH" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "BIRTH" )->AsString!="") )
{
// Total += StrToInt ( Query->FieldByName ( "BIRTH" )->AsString ) ;
ItemsCount2 ++ ;
}
ADOQuery1->Next () ;
}
结果统计出来的数目是一样的,但我数据表中明显不一样呀!
AGE有空,而BIRTH没有呀!
帮看看嘛!谢谢啦!
int Total , ItemsCount1 = 0,ItemsCount2 = 0;
while ( !ADOQuery1->Eof )
{
if ( (ADOQuery1->FieldByName ( "AGE" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "AGE" )->AsString!="")
{
// Total += StrToInt ( Query->FieldByName ( "AGE" )->AsString ) ;
ItemsCount1 ++
}
if ( (ADOQuery1->FieldByName ( "BIRTH" )->AsString!=NULL)&&(ADOQuery1->FieldByName ( "BIRTH" )->AsString!="") )
{
// Total += StrToInt ( Query->FieldByName ( "BIRTH" )->AsString ) ;
ItemsCount2 ++ ;
}
ADOQuery1->Next () ;
}
结果统计出来的数目是一样的,但我数据表中明显不一样呀!
AGE有空,而BIRTH没有呀!
帮看看嘛!谢谢啦!
#4
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from from yourtable ..... "
求值: " select sum(B) bsum from from yourtable ..... "
平均值=jilushu/bsum;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
#5
sorry:
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from from yourtable ..... "
求值: " select sum(B) bsum from from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from from yourtable ..... "
求值: " select sum(B) bsum from from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
#6
sorry again:
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from yourtable ..... "
求值: " select sum(B) bsum from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
用sql 语句直接求平均值应该更简单吧!
求记录数:"select count(B) jilushu from yourtable ..... "
求值: " select sum(B) bsum from yourtable ..... "
平均值=bsum /jilushu;
或者直接求平均值:"select average(B) bvalue from yourtable...."
建议看一看 SQL方面的书,或者看看 SQL Server 2000上的帮助。
#7
select count(B) from yourtable where b is not null
可以先出你要的分母
select sum(B) from yourtable
可以先出你要的分子
可以先出你要的分母
select sum(B) from yourtable
可以先出你要的分子
#8
select AVG(B) from yourtable 可以直接求平均值吧。
书上这么说,我没用过。
书上这么说,我没用过。