2016-03-21 77 views
0

我试图计算平均值,最小值,最大值,总数,但我得到错误的结果。选择结果的平均值(),min(),max(),toatl(),count()

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 

我已经改变了我的查询,选择平均等,为的选择结果现在 我得到我所期望的,但我想显示 一个表怎么办所有选定列。

预期的结果 enter image description here

结果以上查询是 enter image description here

+3

将t0.brandid = null替换为null – TheGameiswar

+0

@TheGameiswar,确保它是't0.brandId为null'。 'is'和'null'之间的空间很重要。 – SlimsGhost

+0

是的,那是类型,我编辑它长回 – TheGameiswar

回答

0

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

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

此外,它可能是由brandIdinteger类型引起的,在这种情况下,其上的所有计算都将使用基于整数的算术运算(即无分数)。如果您只希望得到整数结果,这很好,但如果您需要分数,请尝试使用CASTbrandid的所有匹配项转换为十进制类型,例如:CAST(brandId as decimal(18, 8)),然后再执行AVG和其他计算。

0

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

+0

我已更新我的查询和预期的结果,你可以请帮助 – Tan

+0

看起来像你可以得到预期的结果,如果你只按'brandName'列 –

+0

我建立基于用户的查询输入如果我不添加groupby所有选定的列我收到错误,所以我按所有选定的列进行分组。如何使两者结合并在一张桌子上展示。 – Tan