Mysql从一列中找到最小的n

时间:2019-11-05 16:37:46

标签: mysql sql-limit

因此在MySQL中,在某些情况下,您可以使用子查询或限制甚至TOP找到最小的n个。但是我想知道是否可以不使用任何一个找到最小的N?有人告诉我这是可能的,但不知道从哪里开始。我认为我必须多次内联,但除此之外,我一无所知。

作为参考,假设我有一个名为薪金的列,其中包含以下数据(10,20,30,40)。如果n = 2,则意味着我需要找到第二小的薪水,即20。

2 个答案:

答案 0 :(得分:2)

在MySQL 8.x中,您可以使用DENSE_RANK()窗口函数,如下所示:

select salary
from (
  select salary, dense_rank() over(order by salary) as rn from t
) x
where rn = 2 -- this gets the second smallest salary

答案 1 :(得分:1)

例如:

DROP TABLE IF EXISTS salary;

CREATE TABLE salary (i INT NOT NULL PRIMARY KEY);

INSERT INTO salary VALUES (10),(20),(30),(40);


SELECT SUBSTRING_INDEX(
          SUBSTRING_INDEX(
             GROUP_CONCAT(i ORDER BY i)
          ,',',2)
       ,',',-1)n 
  FROM salary;
+------+
| n    |
+------+
| 20   |
+------+

或(具体是n = 2的地方)

SELECT MIN(i) x 
  FROM salary 
  LEFT 
  JOIN (SELECT MIN(i) y FROM salary) j 
    ON y = i 
 WHERE y IS NULL;
+------+
| x    |
+------+
|   20 |
+------+