2016-11-30 22 views
0

的時候我就喜歡做這樣的事情使用子查詢,而不使用子查詢有總:選擇總不分割

select 
    category, 
    date, 
    sum(qty)/(select sum(qty) from table where t.date= table.date) as share_of_total 
    from table t 
    group by category,date; 

表看起來是這樣的:

category date qty 
1 2016-11-01 3 
1 2016-12-01 4 
2 2016-12-01 6 
2 2016-11-01 7 

預期結果如下:

category date share_of_total 
1 2016-11-01 30% 
2 2016-11-01 70% 
1 2016-12-01 40% 
2 2016-12-01 60% 
+0

請給出表格定義和數據,以幫助您完成 –

+0

!希望現在更清楚。 –

回答

1

已更新

這就是答案:

b=# create table "table" (category int,"date" date,qty int); 
CREATE TABLE 
b=# insert into "table" values (1,'2016-11-01',3), (1,'2016-12-01',4), (2,'2016-12-01',6), (2,'2016-11-01',7); 
INSERT 0 4 
b=# select 
    category 
, "date" 
, concat((qty*100)/sum(qty) over (partition by "date") ,'%') share_of_total from "table" 
order by "date", category 
; 
category | date | share_of_total 
----------+------------+---------------- 
     1 | 2016-11-01 | 30% 
     2 | 2016-11-01 | 70% 
     1 | 2016-12-01 | 40% 
     2 | 2016-12-01 | 60% 
(4 rows) 

而例子中,你應該如何問你的問題。將模式創建納入問題可節省打字時間,以重現您擁有的內容。人們可能不想花時間來幫助你,只是因爲你沒有花你的時間來提供一個沙箱。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/評論/低質量帖/ 14454717) –

+0

@PedroWerneck我修改作者查詢沒有子查詢,並給出相同的結果。正如他在他的問題中明確表示的那樣如果你認爲我應該刪除我的答案,我會的。你做? –