想知道如何编写SQL函数来查找表中第N个最大元素,如果没有第N个最大元素,则返回Null。查找SQL中第N大元素
使用MySQL/MySQL工作台。
顺便说一句,我的问题与第N个最高工资问题不同,因为我有一个附加要求,如果第N个最大元素不存在,则返回Null。任何想法都表示赞赏。
在此先感谢, 林
想知道如何编写SQL函数来查找表中第N个最大元素,如果没有第N个最大元素,则返回Null。查找SQL中第N大元素
使用MySQL/MySQL工作台。
顺便说一句,我的问题与第N个最高工资问题不同,因为我有一个附加要求,如果第N个最大元素不存在,则返回Null。任何想法都表示赞赏。
在此先感谢, 林
你可以这样做:
SELECT t1.*
FROM (
SELECT *
FROM my_table
ORDER BY value DESC
LIMIT 1
OFFSET N -- Set your value for N here, N being 0-based
) t1
RIGHT OUTER JOIN (
SELECT null -- This will guarantee that you have at least one row
) t2
ON TRUE
聪明而聪明。 :) –
我能想到的任何情况下,我会想这样做的......
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT CASE WHEN COUNT(*) = 9 THEN x.i ELSE NULL END i
FROM ints x
JOIN ints y
ON y.i <= x.i
GROUP
BY x.i
ORDER
BY i DESC
LIMIT 1;
+------+
| i |
+------+
| 8 |
+------+
SELECT CASE WHEN COUNT(*) = 11 THEN x.i ELSE NULL END i
FROM ints x
JOIN ints y
ON y.i <= x.i
GROUP
BY x.i
ORDER
BY i DESC
LIMIT 1;
+------+
| i |
+------+
| NULL |
+------+
SELECT *from Employee_Test_salary
go
with emplsal as(
\t SELECT Emp_Sal ,DENSE_RANK() over (order by Emp_Sal desc) as rownumber
\t from Employee_Test_salary
)
select top 1 Emp_Sal from emplsal where emplsal.rownumber =N
[SQL查询从工资表中查找第N个最高工资]的可能重复(http://stackoverflow.com/questions/3850034/sql-query-to-find-nth-highest-salary-from-a-salary -table) –
@SabyasachiMishra,这是不一样的。我有一个额外的要求,如果第N个最大的元素不存在,返回Null。任何想法都表示赞赏。 –
你想如何处理同等价值的元素? –