我有一個現有的table1,其中包含「account」,「tax_year」和其他字段。當CONCAT(account,tax_year)的頻率爲1並符合WHERE子句時,我想創建一個table2與來自table1的記錄。如何在PostgresSQL中使用Count作爲標準
例如,如果table1的樣子如下:
account year
aaa 2014
bbb 2016
bbb 2016
ddd 2014
ddd 2014
ddd 2015
表2應該是:
account year
aaa 2014
ddd 2015
這裏是我的腳本:
DROP TABLE IF EXISTS table1;
CREATE table2 AS
SELECT
account::text,
tax_year::text,
building_number,
imprv_type,
building_style_code,
quality,
quality_description,
date_erected,
yr_remodel,
actual_area,
heat_area,
gross_area,
CONCAT(account, tax_year) AS unq
FROM table1
WHERE imprv_type=1001 and date_erected>0 and date_erected IS NOT NULL and quality IS NOT NULL and quality_description IS NOT NULL and yr_remodel>0 and yr_remodel IS NOT NULL and heat_area>0 and heat_area IS NOT NULL
GROUP BY account,
tax_year,
building_number,
imprv_type,
building_style_code,
quality,
quality_description,
date_erected,
yr_remodel,
actual_area,
heat_area,
gross_area,
unq
HAVING COUNT(unq)=1;
我花了兩天但它仍然無法弄清楚如何做對。謝謝您的幫助!
謝謝!我的源表中有11,755,200行和71行。該查詢已運行了20個小時,仍在運行。花費這麼長時間來分析這個數據集的大小是否很常見?我是Postgres的新手 – 12B01
這個查詢的確很昂貴。服務器很可能會耗盡內存,導致內存交換。隨着表格的大小,應該使用特殊的方法,例如。通過使用where子句將數據劃分爲更小的邏輯部分來分階段執行。 – klin