我有一個DB存儲從C到AAA值,而C是最差和AAA最好的。SQL AVG與案例
現在我需要這個值的平均值,我不知道如何首先將值轉換爲int值,計算平均值,將平均值舍入爲int並將其轉換回來。
定義:
C = 1
B = 2
A = 3
AA = 4
AAA = 5
是,即使可能有一個SQL語句?我試圖將AVG和CASE結合起來,但我沒有把它運行起來...... 感謝您的幫助!
問候,
我有一個DB存儲從C到AAA值,而C是最差和AAA最好的。SQL AVG與案例
現在我需要這個值的平均值,我不知道如何首先將值轉換爲int值,計算平均值,將平均值舍入爲int並將其轉換回來。
定義:
C = 1
B = 2
A = 3
AA = 4
AAA = 5
是,即使可能有一個SQL語句?我試圖將AVG和CASE結合起來,但我沒有把它運行起來...... 感謝您的幫助!
問候,
select avg(case score
when 'C' then 1
when 'B' then 2
when 'A' then 3
when 'AA' then 4
when 'AAA' then 5
end) as avg_score
from the_table;
(假定列被稱爲score
)
要轉換此回 「字符值」,包裹在另一種情況下的輸出:
select case cast(avg_score as int)
when 1 then 'C'
when 2 then 'B'
when 3 then 'A'
when 4 then 'AA'
when 5 then 'AAA'
end as avg_score_value
from (
select avg(case score
when 'C' then 1
when 'B' then 2
when 'A' then 3
when 'AA' then 4
when 'AAA' then 5
end) as avg_score
from the_table;
) t
以上cast(avg_score as int)
假定爲ANSI SQL。您的DBMS可能有不同的方法將值轉換爲整數。
非常感謝!它的工作原理是:-) 但是Apache Derby圍繞着這個值 - 例如 - 1.8到1 ...但是我想我找到了一個解決方案(用round和float);-) – Contoweb
我已經爲你創建了這個例子。 你可以將你的排名轉換成臨時表,然後計算,當你完成時,放棄它。
create table sof (id int identity,a nvarchar (10))
insert into sof values ('a')
insert into sof values ('b')
insert into sof values ('c')
select case a when 'AAA ' then 5
when 'AA' then 4
when 'A' then 3
when 'B' then 2
else 1
end as av
into #temp
from sof
----for rounded
select ROUND(AVG(CAST(av AS FLOAT)), 4)
from #temp
--not rounded
select AVG (av)
from #temp
發佈您到目前爲止所嘗試的內容。 –
一次做一件事。首先將字母轉換爲相關的數字。 –
你應該用你正在使用的數據庫標記你的問題。 –