为什么在使用 MIN/MAX 函数时必须使用聚合器

Why do I have to use aggregators when using MIN/MAX Function

我想从列中获取 MIN 值,以及对应的 date

SELECT date, MIN(speed) FROM foo 
    INNER JOIN bar
        ON foo.id = bar.foo_id;

那不行

Column date must be used in GROUP BY or in another aggregate function

我不明白为什么我不能 select MIN(speed) 的日期。它在同一行,只是另一个属性...

如错误消息中所述,您需要在 GROUP BY:

中包含 date
SELECT  date,
        MIN(speed)
  FROM foo 
    INNER JOIN bar ON foo.id = bar.foo_id
  GROUP BY date;

为什么你不能做你想做的,因为那不是 SQL 的定义方式。我认为您的版本不会很有用。毕竟,如果您有 AVG(speed),您的查询会做什么?或者 MIN(speed)MAX(speed)?

无论如何,使用 ORDER BY:

SELECT date, speed
FROM foo JOIN
     bar
     ON foo.id = bar.foo_id
ORDER BY speed
LIMIT 1;

I do not understand why I cannot select the date, where MIN(speed) is

聚合函数将许多行减少为一行。 min(speed) 没有 GROUP BY(如您所用)的结果会产生一个 单个 值(和行) - 但您将有多个值 date专栏

错误消息告诉您,Postgres 不会只是为您选择一个随机值,您必须指定一些规则来选择您想要的日期值或日期和速度的组合。