我偶然发现了jOOQ's maxDistinct SQL aggregation function。
MAX(DISTINCT x)
做什么与MAX(x)
不同?
答案 0 :(得分:4)
maxDistinct
和minDistinct
是为了与其他聚合函数保持一致,其中具有不同选项实际上有所不同(例如countDistinct
,sumDistinct
)
由于在数据集的不同值之间计算的最大值(或最小值)在数学上等同于同一组的简单最大值(或最小值),因此这些函数基本上是多余的。
答案 1 :(得分:1)
简而言之,没有区别。对于MySQL,它甚至声明in manual page:
返回expr的最大值。 MAX()可以采用字符串参数; 在这种情况下,它返回最大字符串值。见8.5.3节, “MySQL如何使用索引”。 DISTINCT关键字可用于查找 但是,这会产生最大的expr的不同值 与省略DISTINCT相同的结果。
之所以可能 - 是因为要保持与其他平台的兼容性。在内部,没有区别 - MySQL将忽略DISTINCT
的影响。它不会尝试用行集做某事(即首先产生不同的集合)。对于索引列,对于非索引 - 完整扫描,它将是Select tables optimized away
(因此从索引而不是表中读取一个值)。
答案 2 :(得分:0)
如果我没错,那就没有区别
对于列
ID
1
2
2
3
3
4
5
5
两个quires的OUTPUT相同5
MAX(DISTINCT x)
// ID = 1,2,2,3,3,4,5,5
// DISTINCT = 1,2,3,4,5
// MAX = 5
// 1 row
和
MAX(x)
// ID = 1,2,2,3,3,4,5,5
// MAX = 5
// 1 row
答案 3 :(得分:0)
理论上,DISTINCT x确保每个元素都与某个集合不同。 max运算符从集合中选择最高值。在纯SQL中,两者之间应该没有区别。