Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的最大值是多少?_Sql_Jooq - Fatal编程技术网

SQL中的最大值是多少?

SQL中的最大值是多少?,sql,jooq,Sql,Jooq,我只是被绊倒了 MAX(DISTINCT x)与仅MAX(x)有什么不同?如果我没有错,就没有区别了 列 ID 1 2 2 3 3 4 5 5 两个quire的输出相同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 定义了maxDistinct和minDi

我只是被绊倒了


MAX(DISTINCT x)
与仅
MAX(x)
有什么不同?

如果我没有错,就没有区别了

ID
1
2
2
3
3
4
5
5
两个quire的输出相同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

定义了
maxDistinct
minDistinct
,以保持与其他聚合函数的一致性,其中具有distinct选项实际上会产生差异(例如,
countDistinct
sumDistinct


由于数据集不同值之间计算的最大值(或最小值)在数学上与同一集合的简单最大值(或最小值)相等,因此这些函数本质上是冗余的

理论上,DISTINCT x确保每个元素都不同于某个集合。“最大”操作符从集合中选择最高值。在纯SQL中,两者之间应该没有区别。

简而言之,没有区别。对于MySQL,它甚至声明:

返回expr的最大值。MAX()可以接受字符串参数; 在这种情况下,它返回最大字符串值。见第8.5.3节, “MySQL如何使用索引”。DISTINCT关键字可用于查找 但是,expr的不同值的最大值会产生 与省略DISTINCT相同的结果


之所以可能,是因为要保持与其他平台的兼容性。在内部,不会有任何区别-MySQL将忽略
DISTINCT
的影响。它不会尝试对一组行执行某些操作(即首先生成不同的集合)。对于索引列,它将是
选择优化掉的表
(从而从索引中读取一个值,而不是一个表),用于非索引-完全扫描。

我想它只是为了与其他聚合保持一致,不同的和非不同的聚合可以产生不同的值。@Damien\u不相信者:+1。我想这可以在SQL级别上解释这一点。使您的BNF保持简单。但是为什么人们要将它包含在他们手工编码的持久性库中(添加它是一项额外的工作)。@Thilo:关于异常的推理实际上比盲目地遵循BNF要复杂得多。。。不过,这是一个很好的发现;-)