2012-11-07 22 views
3

我得到一個錯誤,運行此查詢組在PostgreSQL的

SELECT date(updated_at), count(updated_at) as total_count 
FROM "persons" 
WHERE ("persons"."updated_at" BETWEEN '2012-10-17 00:00:00.000000' AND '2012-11-07  12:25:04.082224') 
GROUP BY date(updated_at) 
ORDER BY persons.updated_at DESC 

我得到的錯誤錯誤日期聚合函數:列「persons.updated_at」必須出現在GROUP BY子句中或在使用聚合函數LINE 5:ORDER BY persons.updated_at DESC

這個作品,如果我從組由呼叫刪除日期(功能,但是我使用的日期功能,因爲我按日期要組,而不是日期時間

任何想法

回答

7

目前還不清楚你想讓Postgres返回什麼。你說它應該按persons.updated_at排序,但是你不會從數據庫中檢索該字段。

我認爲,你想要做的是:

SELECT date(updated_at), count(updated_at) as total_count 
FROM "persons" 
WHERE ("persons"."updated_at" BETWEEN '2012-10-17 00:00:00.000000' AND '2012-11-07  12:25:04.082224') 
GROUP BY date(updated_at) 
ORDER BY count(updated_at) DESC -- this line changed! 

現在你明確地告訴DB從COUNT-合計所得到的值進行排序。您也可以使用:ORDER BY 2 DESC,有效地告訴數據庫按結果集中的第二列進行排序。不過,我非常喜歡明確說明列。

注意,我目前無法測試此查詢,但我認爲這應該工作。

3

問題在於,因爲您正在按date(updated_at)進行分組,所以updated_at的值可能不是唯一的,updated_at的不同值可能會返回相同的值date(updated_at)。你需要告訴數據庫它應該使用可能值,或交替使用可能的

SELECT date(updated_at) FROM persons GROUP BY date(updated_at) 
ORDER BY date(updated_at) 

SELECT date(updated_at) FROM persons GROUP BY date(updated_at) 
ORDER BY min(updated_at) 
+0

'分鐘一個由組返回的值,()'在'ORDER BY'中拯救了我的一天! – sequielo