我有一個名爲記分牌表,其包含一個命名爲得分,其是含有值27,56,78,12,89,77,34,23,90,87,33,55,30,67,76,87,56
陣列字段,我想寫一個PostgreSQL過程來取三類
category 1 = top 10% values of the total no of values in array
category 2 = top 20% values of the total no of values in array
category 3 = top 30% values of the total no of values in array
並把它放在一個陣列相同的格式,即
[category 1 values,category 2 values,category 3 values]
PostgreSQL的過程中,20%和30%的值
1
A
回答
0
水木清華這樣應該做的:
t=# with p as (
with ntile as (
with v as (
select unnest('{27,56,78,12,89,77,34,23,90,87,33,55,30,67,76,87,56}'::int[]) a
)
select a,ntile(10) over(order by a desc)
from v
)
select distinct string_agg(a::text,',') over (partition by ntile),ntile
from ntile
where ntile <=3 order by ntile
)
select array_agg(concat('category ',ntile,' ',string_agg))
from p;
array_agg
------------------------------------------------------------
{"category 1 90,89","category 2 87,87","category 3 78,77"}
(1 row)
Time: 0.493 ms
0
我假設,你有一個列作爲id和另一個是數組類型的表。基於假設 我已經創建瞭如下表並向其中插入兩個值。
create table test_array (id int, values int[]);
insert into test_array values(1 ,'{27,56,78,12,89,77,34,23,90,87,33,55,30,67,76,87,56}');
insert into test_array values(2 ,'{72,65,84,21,98,77,43,32,9,78,41,66,3,76,67,88,56}');
以下是用於查找您所提到的類別的功能。如果你沒有任何標識列在表 ,那麼你可以通過使用window function暗示加號:ROW_NUMBER()。
create or replace function find_category() returns table(category text[]) as
$$
BEGIN
return query with unnestColumn as (
select id, unnest(values) as values, ntile(10) over(partition by id order by unnest(values) desc) as ntilenumber
from test_array
) ,groupedCategory as (select id, ntilenumber, string_agg(values::text,',') as combinedvalues from unnestColumn
where
ntilenumber <= 3
group by id, ntilenumber)
select array_agg(concat('Categoty',ntilenumber, ' ', combinedvalues))
from groupedCategory
group by id;
END;
$$
language 'plpgsql';
執行下面的函數來檢查輸出。
select * from find_category();
相關問題
- 1. 20-30個併發mysql連接導致RDS峯值超過80%
- 2. TickLevelFormatter不適用於javafx中的值10 20 30等
- 3. Javascript時間08:30 - 20:00
- 4. PostgreSQL的過程
- 5. 加上13:30 + 00:00:20 = 13:30:20等小時數,但是如何?
- 6. 10-20數字值的數據類型的使用 - PostgreSQL
- 7. 刪除與超過30%的缺失值
- 8. 通過F#和Npgsql調用Postgresql中的存儲過程
- 9. PHP + PostgreSQL的+存儲過程
- 10. sonarqube:緩慢的分析:30秒的maven,20分鐘的聲納
- 11. Twitter的喜愛和超過20
- 12. 重寫存儲過程返回而不是中位數(50%),在20%/ 30%等位置的項目
- 13. PostgreSQL在Python中的存儲過程
- 14. 刪除或存儲過程中的PostgreSQL
- 15. PostgreSQL存儲過程中的COMMIT
- 16. PostgreSQL:如何區分存儲過程和表值函數?
- 17. PostgreSQL中的存儲過程和觸發器
- 18. 我的Java程序在20-30分鐘後達到80%cpu使用率
- 19. PostgreSQL存儲過程
- 20. 存儲過程PostgreSQL和C#WPF
- 21. SurfaceView背景減慢使用此代碼的onDraw 20-30毫秒
- 22. 從1-30創建20個不同的數字不重複
- 23. 這個「10」+ 20 + 30的輸出是什麼?在JavaScript
- 24. 存儲20個國家30個類別的物品總數
- 25. Julia只使用我CPU的20-30%。我該怎麼辦?
- 26. 需要20 - 30秒才能運行的SQL查詢優化
- 27. Postgresql - PostgreSQL特定類型的簡單值和值
- 28. 播放互聯網廣播流Android中 - 流20-30分鐘
- 29. SDL2 - RenderPresent隨機抽取20-30 + ms(在Node.JS FFI調用中)
- 30. Javascript新回覆日期當我通過日期爲「21-04-2017 20:34:30 UTC +05:30」
謝謝,但實際上我希望它在過程中加上我忘了提及,數組是表,所以我們必須從該表 – naina
取值你可以用上面的到SQL的功能。也請嘗試從第一次嘗試問問題 - 否則我們不回答問題,而是在此聊天支持 –