2017-06-13 119 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中的列。

相关问题