什么是SQL中的MAX(DISTINCT x)?

时间:2014-03-07 07:41:49

标签: sql jooq

我偶然发现了jOOQ's maxDistinct SQL aggregation function

MAX(DISTINCT x)做什么与MAX(x)不同?

4 个答案:

答案 0 :(得分:4)

定义

maxDistinctminDistinct是为了与其他聚合函数保持一致,其中具有不同选项实际上有所不同(例如countDistinctsumDistinct

由于在数据集的不同值之间计算的最大值(或最小值)在数学上等同于同一组的简单最大值(或最小值),因此这些函数基本上是多余的。

答案 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中,两者之间应该没有区别。