2016-03-21 55 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