2016-02-18 72 views
0

我正在使用Postgresql來編寫一個查詢,該查詢每天計算差異值的總和並從其他表中獲得單價il_costs,我試圖用子查詢實現。下面整個查詢:數據函數在子查詢中分組的項目

SELECT date(read.readed_at), 
     SUM(read.diff), 
     (SELECT water_unit 
     FROM il_costs 
     WHERE EXTRACT(MONTH FROM created_at) = EXTRACT(MONTH FROM date(read.readed_at)) 
      AND EXTRACT(YEAR FROM created_at) = EXTRACT(YEAR FROM date(read.readed_at))) 
FROM il_communicators_readings read 
GROUP BY date(read.readed_at) 
ORDER BY date(read.readed_at) ASC; 

我收到約未分組列的錯誤,但我使用date(read.readed_at)也分組功能:

ERROR: subquery uses ungrouped column "read.readed_at" from outer query 
LINE 1: ...(MONTH FROM created_at) = EXTRACT(MONTH FROM date(read.reade... 
+0

一般GROUP BY規則:「如果指定了GROUP BY子句,在SELECT列表中的每個列引用必須明確指出的一個分組列或者是一組函數的參數。」 – jarlh

回答

1

您可以嘗試使用查詢作爲子查詢,並執行外部查詢相關子查詢:

SELECT mydate, s_diff, 
     (SELECT water_unit 
     FROM il_costs 
     WHERE EXTRACT(MONTH FROM created_at) = EXTRACT(MONTH FROM mydate) 
      AND EXTRACT(YEAR FROM created_at) = EXTRACT(YEAR FROM mydate)) 
FROM (
    SELECT date(read.readed_at) AS mydate, 
     SUM(read.diff) as s_diff 
    FROM il_communicators_readings read 
    GROUP BY date(read.readed_at)) AS t 
ORDER BY mydate ASC; 
0

問題沒有read.readed_at,它是在group by子查詢沒有。我不認爲這樣使用子查詢是個好主意。

試試這個:

SELECT date(read.readed_at), 
    SUM(read.diff), 
    costs.water_unit 
FROM il_communicators_readings read 
Left Join il_costs costs 
ON EXTRACT(MONTH FROM costs.created_at) = EXTRACT(MONTH FROM date(read.readed_at)) 
AND EXTRACT(YEAR FROM costs.created_at) = EXTRACT(YEAR FROM date(read.readed_at)) 
GROUP BY date(read.readed_at),costs.water_unit 
ORDER BY date(read.readed_at) ASC; 
+0

@a_horse_with_no_name哦,謝謝,你是對的 –