我試圖在PostgreSQL中編寫查詢,並且因爲它適用於其他數據庫引擎而感到有點沮喪。我需要從一個給定的連接的表像這樣選擇前5名用戶:postgreSQL選擇未在聚合函數中使用的其他列
SELECT users.*, COUNT(deals.id) AS num_deals FROM users, deals WHERE deals.users_id = users.id GROUP BY users.id ORDER BY num_deals LIMIT 5;
我所需要的前5名用戶。這段代碼可以在sqlite,mysql等工作,但PostgreSQL拒絕選擇其他字段在集合函數中不使用。我收到以下錯誤:
PGError: ERROR: column "users.id" must appear in the GROUP BY clause or be used in an aggregate function
如何在PostgreSQL中執行此操作?
我相信它工作在MySQL和SQLite但「等」是錯的。沒有其他數據庫允許這個。這是唯一的兩個。 – 2011-01-21 08:02:26
其實,假設users.id是一個主鍵,它是*不*錯。 (儘管MySQL在正確和錯誤的時候都會這樣做)。 PostgreSQL 9.1將支持按照其編寫的方式運行此查詢 - 因爲GROUP BY位於PRIMARY KEY上,所以我們可以推斷出所有其他列在功能上依賴於它。 – 2011-01-21 09:58:15
@Magnus:我知道9.1會支持這個,但9.1目前還不可用 – 2011-01-21 14:26:39