选择所选结果的avg(),min(),max(),toatl(),count()

时间:2016-03-21 14:23:21

标签: sql-server-2008

我正在尝试计算平均值,最小值,最大值,总数,计数但我的结果是错误的。

SELECT t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy  ,
   AVG(t0.brandID) AS brandID_AVERAGE,
   min(t0.brandid) as branid_min,
   MAX(t0.brandid) as brandid_max,
   COUNT(t0.brandid) as brandid_count    
   FROM brands t0 
   Where  t0. brandID=null OR  t0. brandName='khasim'
   group by t0.brandID,t0.brandName,t0.cdt,t0.udt,t0.brandstatus,t0.AddedBy


select AVG(CAST (brandID AS bigint)) AS brandID_AVERAGE,
   min(CAST (brandID AS bigint)) as branid_min,
   MAX(CAST (brandID AS bigint)) as brandid_max,
   COUNT(CAST (brandID AS bigint)) as brandid_count    from
  (SELECT t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy  

   FROM brands t0 
   Where  t0. brandID=null OR  t0. brandName='budwieser'
   group by t0.brandID,t0.brandName,t0.cdt,t0.udt,t0.brandstatus,t0.AddedBy) temptable 
  

我已经更改了我的查询以选择avg等以获得现在选择的结果   我得到了我的期望,但我想显示所有选定的列   一张桌子怎么做。

预期结果 enter image description here

以上查询的结果是 enter image description here

2 个答案:

答案 0 :(得分:0)

您返回一行的第一个查询看起来是正确的。您获得许多行的第二个屏幕截图看起来像是在使用WINDOWING函数(即任何带有OVER子句的内容)。这不会聚合数据,它会返回所有行,并在返回每一行时重复集合上的计算。

是否可以包含产生错误结果的完整查询文本?

此外,它可能是brandIdinteger类型引起的,在这种情况下,对它的所有计算都将使用基于整数的算术(即没有分数)。如果你只想要整数结果,这很好,但如果你需要分数,尝试使用CASTbrandid的所有出现转换为十进制类型,如下所示:CAST(brandId as decimal(18, 8))在执行{之前{1}}和其他计算。

答案 1 :(得分:0)

首先。根据我在SQL中的最佳知识,null不等于null。因此,您需要使用is null来检查值是否等于null。 其次。你能解释下划线值有什么问题吗?