我希望在不使用min()函数的情况下查看Employees表中具有最低工资的员工的详细信息。为此,我编写了如下代码
SELECT *
FROM Employees
WHERE SALARY IN (SELECT SALARY
FROM Employees
order by salary)
AND ROWNUM=1
这里显示错误
ORA-00907:缺少右括号 00907. 00000 - “缺少右括号” *原因:
*动作:行错误:5列:18
那么那里的错误是什么...... ????
我正在阅读本网站
http://www.w3schools.com/sql/sql_top.asp请参阅oracle的语法
答案 0 :(得分:1)
IN CLAUSE不支持ORDER BY,因为它没有任何意义。您可以过滤集合中的行,但过滤它们的顺序并不重要。您应该对结果行进行排序,然后选择第一行(ROWNUM = 1)
答案 1 :(得分:1)
您可以从已经排序的选择中选择并选择第一行。
$(document).ready(function() {
d3.json(
"https://raw.githubusercontent.com/datasets/geo-boundaries-world-110m/master/countries.geojson",
function(error, data) {
var myGeoJSON = data.features;
for (i = 0; i < myGeoJSON.length; i++) {
var path = d3.geo.path();
var width = 960;
var height = 600;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
svg.selectAll("path")
.data(data.features)
.enter().append("path")
.attr("d",path)
.attr("fill","#3e429a");
}
}
);
});
您无法在一个选项中执行此操作,因为rownum将在order by之前执行。这就是为什么我们需要在另外的SELECT中包装它。
答案 2 :(得分:0)
您也可以使用LIMIT运算符。
SELECT *
FROM Employee
WHERE salary IN (SELECT salary
FROM Employee
order by salary)
LIMIT 1
我已使用http://sqlfiddle.com/来验证这一点。您可以在此处验证:http://sqlfiddle.com/#!9/d73aa3/3/0
以下是表创建和引导语句。
CREATE TABLE Employee
(
name varchar(50),
salary double
);
insert into Employee values('bob', 80000.00);
insert into Employee values('john', 100000.00);