簡體   English   中英

如何在 PostgresSQL 中獲取轉置數組的總和

[英]How to get sum of transposed array in PostgresSQL

我在結構下面設計了一個表格。

         Column          |           Type           | Collation | Nullable | Default
-------------------------+--------------------------+-----------+----------+---------
 counts                  | integer[]                |           |          |      
  1. 計數字段中的所有值都有 9 個元素。
  2. 所有元素都不為空。

我想只使用 SQL 查詢來獲得轉置數組的總和,如下面的 python 代碼。

import numpy as np
counts = np.array([
    [ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11]
    ])

counts = counts.transpose()

sum = list(map(lambda x: sum(x), counts))
print(sum) # [12, 15, 18, 21]

所以給定示例數據:

 counts                | 
-----------------------|
{0,15,8,6,10,12,4,0,5} | 
{0,4,6,14,7,9,8,0,9}   |
{0,6,7,4,11,6,10,0,10} |

因為記錄有上千條,所以在前端計算轉置總和需要很長時間500ms才能得到響應。

我想要一個結果:

 counts                    |  
---------------------------|
{0,25,21,24,28,27,22,0,24} | 

或者

 value0 | value1 | value2 | value3 | value4 | value5 | value6 | value7 | value8 |
--------|--------|--------|--------|--------|--------|--------|--------|--------|
 0      | 25     | 21     | 24     | 28     | 27     | 22     | 0      | 24     | 

在我看來,這個問題可以使用 SQL 函數來解決,但我不知道如何使用它。

只需 SUM() 數組元素:

SELECT SUM(i[1]) -- first
    ,   SUM(i[2]) -- second
    ,   SUM(i[3]) -- third
-- etc.
    ,   SUM(i[9])
FROM    (VALUES
('{0,15,8,6,10,12,4,0,5}'::int[]),
('{0,4,6,14,7,9,8,0,9}'),
('{0,6,7,4,11,6,10,0,10}')) s(i);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM