2016-02-18 40 views
0

我需要查找模式中只包含空值的特定列的行計數,說'性別'。我有超過數百個模式,每個模式有超過10個表,所以我也需要根據模式名稱對它進行分組。我怎樣才能做到這一點?PostgreSQL:基於特定列和條件的模式中每個表格的行計數

+2

提供一些樣本數據和期望輸出來幫助我們改變你的問題。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **]( http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)瞭解如何提高您的問題質量並獲得更好的答案。 –

回答

0

創建一個表來存儲表名和行數根據你的病情,

-- Table: test.row_count 

-- DROP TABLE test.row_count; 

CREATE TABLE test.row_count 
(
    table_name character varying, 
    count integer 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE test.row_count 
    OWNER TO postgres; 

下面的代碼將幫助您存儲的行數和上表的表名,

-- Function: retrive_row_count() 

-- DROP FUNCTION retrive_row_count(); 

CREATE OR REPLACE FUNCTION retrive_row_count() 
    RETURNS integer AS 
$BODY$ 

DECLARE 
    v_table text; 
BEGIN 

FOR v_table IN 
    SELECT table_schema||'.'||table_name 
    FROM information_schema.columns 
    WHERE column_name = 'gender' 
LOOP 

    EXECUTE 'INSERT INTO test.row_count(table_name , count) SELECT '''||v_table || ''' , COUNT(*) FROM '||v_table || ' WHERE gender IS NULL' ; 



END LOOP; 

return 1; 
    END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION retrive_row_count() 
    OWNER TO postgres; 
+0

嗨@Mohit謝謝你的回覆。我試過你的解決方案,它給了我成功的查詢,但我不知道我應該檢查結果。我跑了兩個查詢,你給了一個小小的調整。我將第一個查詢更改爲像這樣CREATE TABLE information_schema.row_count而不是'test',因爲測試給我錯誤。 –

+0

嗨zt.az,「測試」是我的機器上的架構之一。你可以使用任何你想要的表名。例如使用public.row_count。確保您還在過程「retrive_row_count()」中更改了表名。 – shiv

+0

好的,謝謝mohit會嘗試它,並在稍後提供反饋。感謝很多! –

相關問題