小编Nis*_*ngh的帖子

为什么在where子句中不允许使用聚合函数

我正在寻求对此的澄清.我在下面写两个问题:

我们有一个员工姓名表,列ID,姓名,薪水

  1.  Select name from employee 
    where sum(salary) > 1000 ;

  2.  Select name from employee 
    where substring_index(name,' ',1) = 'nishant' ;
Run Code Online (Sandbox Code Playgroud)

查询1不起作用,但查询2确实有效.根据我的开发经验,我觉得可能的解释是:

sum()适用于参数中指定的一组值.这里'salary'列被传递,因此它必须将此列的所有值相加.但是在where子句中,记录是逐个检查的,就像检查第一个记录1一样,等等.因此,sum(salary)将不会被计算,因为它需要访问所有列值,然后只返回一个值.

查询2作为substring_index()工作在单个值上,因此它在提供给它的值上工作.

你能否证实我的理解.

sql oracle aggregate-functions

13
推荐指数
3
解决办法
2万
查看次数

静态导入具有相同的静态变量名称

我正在对Long和Integer类的成员进行静态导入:

import static java.lang.Integer.MAX_VALUE;
import static java.lang.Long.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试使用此变量MAX_VALUE并打印它,我将收到一个错误:

import static java.lang.Integer.MAX_VALUE;
import static java.lang.Long.MAX_VALUE;

public class StaticImportDemo2 {
    public static void main(String[] args) {
        //Error :: The field MAX_VALUE is ambiguous 
        System.out.println("Print without static import Integer.MAX_VALUE "+MAX_VALUE);
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以.要删除错误,我将不得不删除一个静态导入来解决这种歧义.

我得到的主要问题是,如果我使用*带有Integer类静态导入的通配符,则编译该类时没有错误:

import static java.lang.System.out;
import static java.lang.Integer.*;
import static java.lang.Long.MAX_VALUE;

public class StaticImportDemo2 {
    public static void main(String[] args) {
        System.out.println("Print without static import Integer.MAX_VALUE " + MAX_VALUE);
    }
}
Run Code Online (Sandbox Code Playgroud)

模棱两可仍然存在.为什么这个编译没有问题?

java compiler-errors wrapper static-import

8
推荐指数
1
解决办法
104
查看次数

toString() 方法中 super 关键字隐式转换为 super.toString() 未发生

我有以下两个课程,如下所示。为了简单起见,仅显示了 toString 重写方法。

        public class Circle {
        @Override
            public String toString() {
                return "Circle";
            }
        }
        public class Cylinder extends Circle {
            @Override
            public String toString() {
     //     return "Cylinder"+this;  // runs without explicitly calling toString() on this keyword
     //     return "Cylinder"+super;  // throws error, asks to delete super token
            return "Cylinder["+super.toString(); // runs without error after adding .toString() with super keyword
            }

}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我对 super 关键字的理解。super 关键字的 toString() 应该像 this 关键字一样隐式调用。事实上,大多数教程和书籍都将 super 关键字称为对超类的一种对象引用,因此它的行为必须与this 关键字与 toString() 内的“+”连接运算符一起使用。请帮助我理解这一点。

java inheritance

3
推荐指数
1
解决办法
1608
查看次数

带参数的Java Integer对象实例化

这个问题是OCP测试系列的一部分.

> Integer i=new Integer(100_00);
Run Code Online (Sandbox Code Playgroud)

我试图理解这是如何工作的,但到目前为止我只有这么多,这是一种消息格式.请详细说明我们如何使用下划线传递数值.请原谅我,如果这是一个简单的概念,但我有点想知道这一点.

java integer

1
推荐指数
1
解决办法
40
查看次数