2017-06-13 114 views
0

說我有這樣的查詢:爲什麼我需要按列分組,而不需要分組?

   SELECT 
        car.id, 
        car.make, 
        car.model, 
        car.vin, 
        car.year, 
        car.color 
       FROM car GROUP BY car.make 

我想GROUP BY使結果,所以我可以消除任何重複做。我基本上試圖做一個SELECT DISTINCT。但是,我得到這個錯誤:

ERROR column must appear in the GROUP BY clause or be used in an aggregate function 

當我不想看到一個組中的任何人看來愚蠢的每一個列組。我如何解決這個問題?

+0

如果每個'make'有多行,那麼數據庫應該選擇哪個'model'或'vin'值? Postgres不會只是返回一些隨機結果給你。 –

回答

0

相反的GROUP BY,使用DISTINCT ON

SELECT DISTINCT ON (c.make) c.* 
FROM car c 
ORDER BY c.make; 

這將返回任意行對每個做。哪一排?任意一個。您可以在ORDER BY中包含第二個鍵以確定您想要的特定行(最便宜,最舊等)。

0

SELECT列表中的所有列名必須出現在GROUP BY子句中,除非名稱僅用於聚合函數中。 PostgreSQL只允許您從GROUP BY子句中省略,這些列在功能上依賴於GROUP BY中的列。

相關問題