我在PostgreSQL 9.3表中有數百萬行,並且我正在努力計算彙總統計信息。如何計算Postgres JSON數組中整體的百分比?
這裏是列:
object_id | date | column_with_json_data_in_key-value_format | bunch_of_irrelevant_columns
沒有爲每個OBJECT_ID /日期組合一行。 JSON列中有大約70個鍵,但是任何給定的行只包含〜5-20個鍵。
在所有的object_id的,針對每一個琴鍵,什麼是日平均分數值?
- 在每一行,計算所有值的總和爲所有按鍵劃分爲特定行
- 如果密鑰不會出現在一排,把它當作具有特定鍵值0該行
- 組的值的結果按日期
- 計算平均值爲每個鍵
所以我的期望輸出與下列的表:
date | key1_name | key1_fractional_average | keyN_name | keyN_fractional_average
我想這個查詢單行,但它不能正常工作:
SELECT value2, total, (value2/total * 100) AS percent FROM
(SELECT SUM(value) AS total FROM
(SELECT CAST(CAST(value AS text) AS integer) FROM json_each((SELECT json_column
FROM original_table
WHERE primary_key = 1)::json)) as table1) as total_table,
(SELECT CAST(CAST(value AS text) AS integer) AS value2 FROM json_each((SELECT json_column
FROM original_table
WHERE primary_key = 1)::json)) as value_table
對於這個特殊的PAGE_ID/insight_date行,查詢返回如下:
value2 | total | percent
------------------------
1; 4; 0
2; 4; 0
1; 4; 0
列value2
和total
是正確的,但percent
列錯誤顯示爲0的,而不是心病直接25%,50%,25%。
不幸的是,因爲JSON是一個相當新的類型的Postgres,google搜索並沒有止跌回升的例子很多。我在這裏完全困惑。
問題不在於JSON是一種新類型。問題在於它不能替代[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization)。 –
謝謝,但在這種情況下,這些JSON值遠遠好於JSON。我提到JSON是一種新的類型,因爲它使我永遠想到要將它轉換爲整數,我首先必須將其轉換爲文本。將它們標準化爲單獨的表格將是一場噩夢,因爲有許多JSON列,並且很少訪問它們。這些特定的查詢只能用於深度分析,所以只要我能夠首先找出這個查詢結構,性能下降就沒有問題。 –