关于数据库查询的问题,请高手指点!

时间:2022-12-01 20:43:47
我打算用到数据库的查询,数据表如下: 
假设字段如下: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  ;//平均值

#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没有呀!

帮看看嘛!谢谢啦!

#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上的帮助。

#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上的帮助。

#7


select count(B) from yourtable where b is not null
可以先出你要的分母
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  ;//平均值

#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没有呀!

帮看看嘛!谢谢啦!

#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上的帮助。

#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上的帮助。

#7


select count(B) from yourtable where b is not null
可以先出你要的分母
select sum(B) from yourtable 
可以先出你要的分子

#8


select AVG(B) from yourtable 可以直接求平均值吧。
书上这么说,我没用过。