2016-07-04 40 views
0

在我的數據庫中,我有一個表「數據點」,兩列「Id」(整數)和「描述」(字符變化)。 Table "Datapoint"PostgreSQL - 結合函數的SELECT和返回值

然後我有一個表「記錄」與三列「Id」(整數),「Dt」(時間戳無時區)和「價值」(雙精度)。 Table "Logging"

我還具有以下功能:

CREATE OR REPLACE FUNCTION count_estimate(query text) 
    RETURNS integer AS 
$BODY$ DECLARE rec record;ROWS INTEGER;BEGIN FOR rec IN EXECUTE 'EXPLAIN ' || query LOOP ROWS := SUBSTRING(rec."QUERY PLAN" FROM ' rows=([[:digit:]]+)');EXIT WHEN ROWS IS NOT NULL;END LOOP;RETURN ROWS;END $BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

這個函數返回由一個SELECT-查詢找到的條目的估計數,例如SELECT count_estimate('SELECT * FROM「Logging」WHERE「Id」= 3')將返回2.

我現在想將表「Datapoint」上的SELECT查詢與函數的返回值相結合,所以,我的結果是這樣的:

ID | Description | EstimatedCount 
1 | Datapoint 1 | 3 
2 | Datapoint 2 | 4 
3 | Datapoint 3 | 2 
4 | Datapoint 4 | 1  

我的SELECT查詢應該是這個樣子:

SELECT 
"Datapoint"."Id", 
"Datapoint"."Description", 

(SELECT count_estimate ('SELECT * FROM "Logging" WHERE "Logging"."Id" = "Datapoint"."Id"')) AS "EstimatedCount" 

FROM 
"Datapoint" 

所以我的問題是寫一個運行SELECT查詢我的目的。

回答

0

什麼:

SELECT 
"Datapoint"."Id", 
"Datapoint"."Description", 

count_estimate ('SELECT * FROM "Logging" WHERE "Logging"."Id" = "Datapoint"."Id"') AS "EstimatedCount" 

FROM 
"Datapoint" 
+0

......但是這是查詢的只是文字副本不行,不行? –

+1

請參閱下面的勞倫茲的修正,但這裏的區別在於,您不需要將它放在子查詢中。 –

+0

啊,我沒有看到。 –

0

你幾乎得到它的權利,但你需要提供的"Datapoint"."Id"值:

SELECT 
    "Datapoint"."Id", 
    "Datapoint"."Description", 
    count_estimate(
     'SELECT * FROM "Logging" WHERE "Logging"."Id" = ' || "Datapoint"."Id" 
    ) AS "EstimatedCount" 
FROM "Datapoint";