我有一個表以下值id
和amt
SQL-如何找到百分比
id amt amt%
1 500 16.7
2 600 20
3 900 30
4 1000 33.3
-----------------------------
3000 100%
我除以amt
爲id=1/sum(amt for all the ids)
找到amt%
爲id=1
。 如何在sql中爲此編寫查詢?
我有一個表以下值id
和amt
SQL-如何找到百分比
id amt amt%
1 500 16.7
2 600 20
3 900 30
4 1000 33.3
-----------------------------
3000 100%
我除以amt
爲id=1/sum(amt for all the ids)
找到amt%
爲id=1
。 如何在sql中爲此編寫查詢?
select id, amt, 100.0 * amt/(select sum(amt) from tab) as amt_percent
from tab
心靈100.0
,.0
非常重要,它會「強制」轉換int
s到float
s。
新增後評論:
select t.id, t.amt, 100.0 * t.amt/p.s as amt_percent
from tab t
join (
select id, sum(amt) as s
from tab
group by id
) p on p.id = t.id
和另一種方式:
select id, amt,
100.0 * amt/(
select sum(amt)
from tab t1
where t1.id = t.id
) as amt_percent
from tab t
我更喜歡加入子查詢 - 第一個。
select id, amt, 100*amt/(select NULLIF(sum(amt),0) from tbl) as "amt%"
from tbl
也許這樣
select t.id, t.amt, 100*amt/sm.s as "amt%"
from tbl t, (select NULLIF(sum(amt),0) as s from tbl) sm
編輯檢查由零
除以你可以嘗試這樣的事情:
SELECT
id, amt,
amt/(SELECT SUM(amt) FROM tabl) * 100 as amtperc
FROM tabl
select id, amt, 100 * amt/(case when (select sum(amt)as ss from tablename)>0 then
(select sum(amt)as ss from tablename) else 1 end) as [amt%] from tablename
假設你使用的是Oracle(在你前面的問題),請嘗試:
select id, amt, 100 * amt/sum(amt) over() amtperc
from your_table
+1'SUM()OVER()'比子查詢更有效率(無論如何MS SQL Server是我的經驗所在) – GarethD 2012-02-24 15:07:02
+1提出'.0' – triclosan 2012-02-24 12:51:40
這個查詢是非常有用的,但多了一個疑問,其實我分組該表由id。在那種情況下如何寫? – ResKing 2012-02-24 12:58:48
@ResKing然後它會看起來有點不同我添加了查詢來回答。 – 2012-02-24 13:03:35