Mysql Нахождение наименьшего n из столбца - PullRequest
0 голосов
/ 05 ноября 2019

Так что в MySQL вы можете найти наименьшее n, используя подзапросы или лимит или даже TOP в некоторых случаях. Но я хотел знать, возможно ли найти наименьшее N, не используя ни одного из них? Мне сказали, что это возможно, но я не знаю, с чего начать. Я предполагаю, что мне нужно внутреннее объединение несколько раз, но, кроме того, я не в курсе.

Для справки, предположим, у меня есть столбец с названием salary со следующими данными (10,20,30,40). Если n = 2, это означает, что мне нужно найти вторую наименьшую зарплату, которая была бы 20.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

В 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 голос
/ 05 ноября 2019

Например:

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 |
+------+
...