我有这个:
SELECT name, value,
MIN(value) as find_min
FROM history
WHERE date_num >= 1609459200
AND date_num <= 1640995200
AND name IN('A')
GROUP BY name
尝试获取日期之间的最小值each单独主题:
name value
A. 3
B 4
C 9
A 0
C 2
我不断收到这个常见的错误:
列“history.value”必须出现在 GROUP BY 子句中或在聚合函数中使用
我读了这个必须出现在 GROUP BY 子句中或在聚合函数中使用 https://stackoverflow.com/questions/19601948/must-appear-in-the-group-by-clause-or-be-used-in-an-aggregate-function
我还是不明白:
- 为什么我必须将所有内容都包含在 GROUP BY 中?逻辑是什么?
- 为什么这不起作用?
- is
Min() over (partition by name)
更好,如果是这样,我怎样才能每次只得到一个结果name
?
EDIT:
如果我尝试:GROUP BY name, find_min
它也会失败,即使在这种情况下他可以产生独特的结果(都一样)
这其实很容易理解。
当你说GROUP BY name
,所有行,其中name
相同的内容被分组在一起形成单个结果行。现在原始表可以包含具有相同内容的两行name
,但不同value
。如果你添加value
to the SELECT
列表,其中哪些应该输出?另一方面,确定min(value)
每个组都没有问题。
即使只有一个value
对于整个团体(就像你的find_min
),您必须将该列添加到GROUP BY
.
实际上有一个例外:如果表的主键位于GROUP BY
子句中,该表中的其他列不需要位于GROUP BY
,因为这自动证明了不可能有不同的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)