【SQL入門問題】如何對GROUP BY的結果進行再計算?



表:
名稱  值1  值2
----  ---  ---
a     1    3
a     2    1
...
====下面是查詢====
select 名稱,sum(值1),sum(值2)
from 表
group by 名稱
====結果====
a   3   4

現在我要的效果是,對sum(值1)和sum(值2)的結果再計算,例如sum(值2)/sum(值1),排列在最后,結果是

a   3   4   1.3333

如何做到?請賜教,感謝!

26 个解决方案

#1



select 名稱,sum(值1),sum(值2),sum(值1)/sum(值2) 占率
from 表
group by 名稱

#2


select 名稱,sum(值1),sum(值2),sum(值1)/sum(值2) from table group by 名稱

?這樣不行?

#3


select 名稱,sum(值1),sum(值2),m(值1)+sum(值2)
from 表
group by 名稱

直接這樣就可以

#4



select sum(值1),sum(值2),sum(值1)/sum(值2)
from 表
group by 名稱

一樣的吧

#5


select 名稱,sum(值1),sum(值2),sum(值1)+sum(值2)
from 表
group by 名稱


#6



select 名稱,sum(值1),sum(值2),ltrim(cast(sum(值1)/sum(值2) as decimal(18,2)))+'%' 比例
from 表
group by 名稱

#7



select 名稱,sum(值1),sum(值2),sum(值1)/sum(值2) AS 值3
from 表
group by 名稱

select 名稱,a,b,ISNULL(a,0)/ISNULL(b,0) AS c from(select 名稱,sum(值1) As a,sum(值2) AS b
from 表
group by 名稱) AS 表1

#8


--> 測試數據:#tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
create table #tb([名稱] varchar(1),[值1] int,[值2] int)
insert #tb
select 'a',1,3 union all
select 'a',2,1

select [名稱],SUM([值1]),SUM([值2]),SUM([值1])*1.0/SUM([值2]) from #tb
group by [名稱]

#9


謝謝各位的熱心回復,可是請各位算算,1/3+2/1 不等於 (1+2)/(3+1)哦~

#10


select 名稱,sum(值1),sum(值2),CAST(sum(值2)*1.0/sum(值1) AS DECIMAL(18, 4))
from 表
group by 名稱

#11


引用 9 樓 ahdung 的回復:
謝謝各位的熱心回復,可是請各位算算,1/3+2/1 不等於 (1+2)/(3+1)哦~
if object_id('tempdb.dbo.#tb') is not null drop table #tb
create table #tb([名稱] varchar(1),[值1] int,[值2] int)
insert #tb
select 'a',1,3 union all
select 'a',2,1

select [名稱],SUM([值1]),SUM([值2]),SUM(1.*[值1]/[值2]) from #tb
group by [名稱]
----------------
名稱 (無列名) (無列名) (無列名)
a 3 4 2.33333333333

#12


SELECT 1/3 + 2/1 
--根據運算符優先級:先/,再+
SELECT (1+2)/(3+1)
--有括號:先+,再/
--注意:1/3 = 0, 3/4 = 0

#13


引用 11 樓 dlut_liuq 的回復:
引用 9 樓 ahdung 的回復:
謝謝各位的熱心回復,可是請各位算算,1/3+2/1 不等於 (1+2)/(3+1)哦~
SQL code
if object_id('tempdb.dbo.#tb') is not null drop table #tb
create table #tb([名稱] varchar(1),[值1] int,[值2] int)
insert #tb
sel……

很明顯我要的是結果相除,即3/4,等於的是0.75,而非2.3333~

#14


引用 12 樓 wwwwgou 的回復:
SQL code
SELECT 1/3 + 2/1 
--根據運算符優先級:先/,再+
SELECT (1+2)/(3+1)
--有括號:先+,再/
--注意:1/3 = 0, 3/4 = 0

好吧,這些小學生都懂,你就告訴我我要的結果怎么做到
a  3  4  0.75

#15


這么多人幫你做了,你話那么多,自己都搞不清楚自己想要做什么,還來提問,鬼知道你是想加起來再做除法,還是做完除法再加,自己想想再提問,謝謝。

#16


引用 14 樓 ahdung 的回復:
引用 12 樓 wwwwgou 的回復:

SQL code
SELECT 1/3 + 2/1
--根據運算符優先級:先/,再+
SELECT (1+2)/(3+1)
--有括號:先+,再/
--注意:1/3 = 0, 3/4 = 0

好吧,這些小學生都懂,你就告訴我我要的結果怎么做到
a 3 4 0.75



select 名稱,sum(值1),sum(值2),sum(值1)/sum(值2) 占率
from 表
group by 名稱

#17


引用 15 樓 ssp2009 的回復:
這么多人幫你做了,你話那么多,自己都搞不清楚自己想要做什么,還來提問,鬼知道你是想加起來再做除法,還是做完除法再加,自己想想再提問,謝謝。


很明顯我在1樓就清楚的描述了我的問題,你能幫我解決就回復,不能解決就別廢話。這是技術論壇,不是水庫,謝謝

#18


引用 17 樓 ahdung 的回復:
引用 15 樓 ssp2009 的回復:

這么多人幫你做了,你話那么多,自己都搞不清楚自己想要做什么,還來提問,鬼知道你是想加起來再做除法,還是做完除法再加,自己想想再提問,謝謝。


很明顯我在1樓就清楚的描述了我的問題,你能幫我解決就回復,不能解決就別廢話。這是技術論壇,不是水庫,謝謝

我糾結!

create table #tb([名稱] varchar(1),[值1] int,[值2] int)
insert #tb
select 'a',1,3 union all
select 'a',2,1
go

select 名稱,sum(值1),sum(值2),1.*sum(值1)/sum(值2) 占率
from #tb
group by 名稱

drop table #tb


#19



名稱                           占率
---- ----------- ----------- ---------------------------------------
a    3           4           0.75000000000

(1 行受影響)

#20


以后看人回帖!  堅決!

#21


引用 18 樓 acherat 的回復:
引用 17 樓 ahdung 的回復:
引用 15 樓 ssp2009 的回復:

這么多人幫你做了,你話那么多,自己都搞不清楚自己想要做什么,還來提問,鬼知道你是想加起來再做除法,還是做完除法再加,自己想想再提問,謝謝。


很明顯我在1樓就清楚的描述了我的問題,你能幫我解決就回復,不能解決就別廢話。這是技術論壇,不是水庫,謝謝

我糾結!

SQL code

crea……


謝謝,我也被糾結了一小下,其實我在處理一個較復雜的查詢,但是直接這樣寫后遇到除0值的錯誤,我失誤的地方在於沒有首先檢查哪里出現0值導致的錯誤,而是覺得這樣寫是不是有問題,所以轉而考慮是不是有對結果進行在計算的方法,摸索無果之下才上來發帖求助,結果一個不小心變成了弱智貼,慚愧~

再次感謝大家的熱心回復。但是不包括15樓的廢話帝,提問的人不代表沒你聰明,回答問題的人也不代表就比提問者能耐,別一副先入為主的姿態,不過很多泡技術壇子的也就這風氣,我也廢話了~

#22


引用 20 樓 acherat 的回復:
以后看人回帖! 堅決!


還請acherat指教,有沒有方法能對結果再計算,也即此貼開頭的問題,感謝!

#23



create table #tb([名稱] varchar(1),[值1] int,[值2] int)
insert #tb
select 'a',1,3 union all
select 'a',2,1
go

select 名稱,sum(值1)值1,sum(值2)值2,
cast(1.*sum(值2)/sum(值1) as decimal(18,4)) 占率,
ltrim(cast(1.*sum(值2)/sum(值1) as decimal(18,4)))+'%' 比例
from #tb
group by 名稱

drop table #tb

名稱   值1     值2        占率         比例
---- ------- --------- ---------- -------------
a     3       4         1.3333     1.3333%

(1 行受影響)

#24


上面答案多的是,自己不注意看。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

select 名稱,sum(值1),sum(值2),1.*sum(值2)/sum(值1) 占率
from #tb
group by 名稱


#25


--查詢了再查詢
select *,t1/t2 as t3 from 
(select 名稱,sum(值1) as t1,sum(值2) as t2
from 表
group by 名稱) as a

#26


引用 25 樓 cxmcxm 的回復:
--查詢了再查詢
select *,t1/t2 as t3 from 
(select 名稱,sum(值1) as t1,sum(值2) as t2
from 表
group by 名稱) as a
...

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com