为什么在使用 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 不会只是为您选择一个随机值,您必须指定一些规则来选择您想要的日期值或日期和速度的组合。
我想从列中获取 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 不会只是为您选择一个随机值,您必须指定一些规则来选择您想要的日期值或日期和速度的组合。