要找出oracle中的第N个最大值,我正在使用以下查询
SELECT DISTINCE sal
FROM emp a
WHERE (
SELECT COUNT(DISTINCE sal)
FROM emp b
WHERE a.sal<=b.sal)=&n;
但根据我的说法,使用上述查询,如果表格大小,执行将需要更多时间。
我正在尝试使用以下查询
SELECT sal
FROM (
SELECT DISTINCE sal
FROM emp
ORDER BY sal DESC )
WHERE rownum=3;
但没有获得输出..任何建议请..请分享有关如何优化查询和减少查询执行时间的任何链接。
答案 0 :(得分:19)
试试这个
select *
from
(
select
sal
,dense_rank() over (order by sal desc) ranking
from table
)
where ranking = 4 -- Replace 4 with any value of N
答案 1 :(得分:4)
SELECT sal FROM (
SELECT sal, row_number() OVER (order by sal desc) AS rn FROM emp
)
WHERE rn = 3
是的,如果表格很大,执行时间会更长。但对于“第N行”查询,唯一的方法是查看所有数据并对其进行排序。如果你在sal上有一个索引,那肯定会快得多。
答案 2 :(得分:4)
SELECT *
FROM Employee Emp1
WHERE (N-1) = (
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
答案 3 :(得分:2)
这将显示表员工的第3个最高薪水。
如果你想找出第5或第6个(无论你想要的话)值,那么只需改变像where rownum<=5" or "where rownum<=6
那样的where条件等等......
select min(sal) from(select distinct(sal) from emp where rownum<=3 order by sal desc);
答案 4 :(得分:2)
我们也可以写下面提到的。
WebDriverWait wait = new WebDriverWait(driver, 6);
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("lets_go")));
el.click();
答案 5 :(得分:1)
就我而言,此查询已成功执行 (Oracle)。
...
modal.find("#portfolio-title").text(title);
modal.find("#portfolio-tag").html(tags);
...
您可以用任何值 'n' 替换值 '10'。
答案 6 :(得分:1)
以下解决方案从12c开始有效:
<div
class="MuiFormControl-root WithStyles(ForwardRef(FormControl))-root-16 makeStyles-formControl-11"
data-testid="custom-form-control"
>
<label
class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-marginDense MuiInputLabel-outlined Mui-focused Mui-focused"
data-shrink="true"
data-testid="custom-form-input-label"
id="demo-simple-select-outlined-label"
>
test-title
</label>
<div
class="MuiInputBase-root MuiOutlinedInput-root makeStyles-select-14 Mui-focused Mui-focused MuiInputBase-formControl"
data-testid="custom-form-select"
>
<div
aria-haspopup="listbox"
aria-labelledby="demo-simple-select-outlined-label demo-simple-select-outlined"
class="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiSelect-outlined MuiInputBase-input MuiOutlinedInput-input"
id="demo-simple-select-outlined"
role="button"
tabindex="0"
>
<span>
</span>
</div>
<input
aria-hidden="true"
class="MuiSelect-nativeInput"
tabindex="-1"
value=""
/>
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiSelect-icon MuiSelect-iconOutlined"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M7 10l5 5 5-5z"
/>
</svg>
<fieldset
aria-hidden="true"
class="PrivateNotchedOutline-root-17 MuiOutlinedInput-notchedOutline"
>
<legend
class="PrivateNotchedOutline-legendLabelled-19 PrivateNotchedOutline-legendNotched-20"
>
<span>
test-title
</span>
</legend>
</fieldset>
</div>
根据您的要求替换Select min(sal) from emp where
Sal in ( select distinct (sal) from emp order by sal desc fetch first n rows only);
答案 7 :(得分:0)
这也有效:
with data as
(
select sal,rwid from (
select salary as sal,rowid as rwid from salary order by salary desc
)
where rownum < 5
)
select * from salary a
where rowid = (select min(rwid) from data)
答案 8 :(得分:0)
SELECT sal
FROM (
SELECT empno,
deptno, sal,
dense_rank( ) over ( partition by deptno order by sal desc) NRANK
FROM emp
)
WHERE NRANK = 4
答案 9 :(得分:0)
SELECT *
FROM (
SELECT empno,
deptno, sal,
dense_rank( ) over ( order by sal desc) NRANK
FROM emp
)
WHERE NRANK = 4
答案 10 :(得分:0)
尝试这个:
> mydata
Train Test Train_rank Test_rank
Method1 14.2 10.0 3 1
Method2 2.2 11.2 1 2
Method3 11.9 12.0 2 3
只需将数字添加为等级,这将使您的薪水排名第n。
答案 11 :(得分:0)
select * from (select rownum as rownumber,emp1.* from (select * from emp order by sal desc) emp1) where rownumber = 3;
答案 12 :(得分:0)
SELECT Min(sal)
FROM (SELECT DISTINCT sal
FROM emp
WHERE sal IS NOT NULL
ORDER BY sal DESC)
WHERE rownum <= n;
答案 13 :(得分:0)
您可以使用Dense_rank()函数优化查询。
例如:
从中选择不同的薪水 (选择薪水,dense_rank()超过(按薪水降序排列)排名 来自员工 ) 排名= 6
注意:排名6是第n个顺序。
答案 14 :(得分:0)
试试这个:
SELECT min(sal) FROM (
SELECT sal FROM emp ORDER BY sal desc) WHERE ROWNUM <= 3; -- Replace 3 with any value of N
答案 15 :(得分:0)
Select min(salary) from (
select distinct(salary) from empdetails order by salary desc
) where rownum <=&rn
只需输入您想要的第n个号码。
答案 16 :(得分:0)
select min(sal) from (select distinct(sal) from emp order by sal desc) where rownum <=&n;
内部查询select distinct(sal) from emp order by sal desc
将给出以下输出,如下所示。
<强> SAL 5000 3000 2975 2850 2450 1600 1500 1300 1250 1100 950 800 强>
在上述查询中没有明显select sal from emp order by sal desc
输出如下。
<强> SAL 5000 3000 3000 2975 2850 2450 1600 1500 1300 1250 1250 1100 950 800 强>
外部查询将给出'N'th max sal(E.g)我在这里尝试过的第4个Max sal和out put如下所示。
<强> MIN(SAL) 2850 强>
答案 17 :(得分:0)
请参阅以下查询以获得第n个最高薪水。通过这种方式,你获得第n个最高薪水。如果你想获得第n个最低工资,你需要在查询中用ASC替换DESC。
答案 18 :(得分:0)
这些查询也有效:
解决方法1)
SELECT ename, sal
FROM Emp e1 WHERE n-1 = (SELECT COUNT(DISTINCT sal)
FROM Emp e2 WHERE e2.sal > e1.sal)
解决方法2)使用row_num函数。
SELECT *
FROM (
SELECT e.*, ROW_NUMBER() OVER (ORDER BY sal DESC) rn FROM Emp e
) WHERE rn = n;
解决方法3)使用rownum pseudocolumn
Select MAX(SAL)
from (
Select *
from (
Select *
from EMP
order by SAL Desc
) where rownum <= n
)
答案 19 :(得分:0)
SELECT TOP (1) Salary FROM
(
SELECT DISTINCT TOP (10) Salary FROM Employee ORDER BY Salary DESC
) AS Emp ORDER BY Salary
这是第10个最高工资,你可以用n替换10。
答案 20 :(得分:0)
您可以将 2 替换为您想要的号码
select * from ( select distinct (sal),ROW_NUMBER() OVER (order by sal desc) rn from emp ) where rn=2
答案 21 :(得分:0)
select * FROM (
select EmployeeID, Salary
, dense_rank() over (order by Salary DESC) ranking
from Employee
)
WHERE ranking = N;
dense_rank()用于工资必须相同。所以它给出了正确的输出,而不是使用rank()。
答案 22 :(得分:0)
试试以下内容:
$a = (array) $coreBootstrap->objectvar->objectvar;
unset($a[idofindex]);
$a = (object) $coreBootstrap->objectvar->objectvar;
$coreBootstrap->objectvar->objectvar = $a;
干杯!
答案 23 :(得分:0)
现在你试试这个,你肯定会得到:
SELECT DISTINCT sal
FROM emp a
WHERE (
SELECT COUNT(DISTINCT sal)
FROM emp b
WHERE a.sal<=b.sal)=&n;
如果你想要第n个最小的sal:
,请提供您的信息SELECT DISTINCT sal
FROM emp a
WHERE (
SELECT COUNT(DISTINCT sal)
FROM emp b
WHERE a.sal>=b.sal)=&n;
答案 24 :(得分:0)
从中选择min(sal)(通过sal DESC从员工订单中选择不同的sal),其中rownum&lt; = N;
将数字放在您要检索的最高sal上。
答案 25 :(得分:-1)
有三种方法......
SELECT salary,first_name,rnk
FROM (SELECT salary,first_name,rank() over (order by salary desc nulls last) as rnk from emp) where rnk=3;
SELECT salary,first_name,rnk
FROM (SELECT salary,first_name,dense_rank() over (order by salary desc nulls last) as rnk from emp) where rnk=3;
select rnk,first_name,salary
from (select rownum as rnk ,first_name,salary
from (select first_name,salary
from emp order by salary desc nulls last)) where rnk=3
答案 26 :(得分:-1)
第五高薪:
SELECT
*
FROM
emp a
WHERE
4 = (
SELECT
COUNT(DISTINCT b.sal)
FROM
emp b
WHERE
a.sal < b.sal
)
将4替换为任何N值。