Mysql 从包含三个冒号Id、名称和薪水的表中查找第二高的薪水

Mysql 从包含三个冒号Id、名称和薪水的表中查找第二高的薪水,mysql,Mysql,如何从一个包含三列的表中找到第二高的薪资,这些列是id、名称、薪资,但在自联接中使用。通过嵌套查询得到答案。但是,我想知道,如果只使用SELECT语句,我们如何使用自联接构建框架,为什么要联接呢 试试这个: 如果必须使用自联接,可以执行以下操作 SELECT x.val FROM my_table x JOIN my_table y ON y.val >= x.val GROUP BY x.val HAVING COUNT(DISTINCT y.val)

如何从一个包含三列的表中找到第二高的薪资,这些列是id、名称、薪资,但在自联接中使用。通过嵌套查询得到答案。但是,我想知道,如果只使用SELECT语句,我们如何使用自联接构建框架,为什么要联接呢

试试这个:


如果必须使用自联接,可以执行以下操作

SELECT x.val 
  FROM my_table x 
  JOIN my_table y 
    ON y.val >= x.val 
 GROUP 
    BY x.val HAVING COUNT(DISTINCT y.val) = ?
从具有三个冒号Id、名称和薪资的表中查找第二高的薪资:

看这张照片

有一个有趣的答案:


如果前两名的薪水都一样呢?看看我的答案。。。。
SELECT x.val 
  FROM my_table x 
  JOIN my_table y 
    ON y.val >= x.val 
 GROUP 
    BY x.val HAVING COUNT(DISTINCT y.val) = ?
SELECT id,NAME,salary FROM high
WHERE salary = (SELECT DISTINCT(salary) FROM high AS e1
WHERE (SELECT COUNT(DISTINCT(salary))=2 FROM high AS e2
WHERE e1.salary <=e2.salary))
ORDER BY NAME;
SELECT id,NAME,salary
FROM high 
WHERE salary = (SELECT DISTINCT(salary) 
                FROM high AS e1 
                WHERE id  = (SELECT COUNT(DISTINCT(salary)) 
                             FROM high AS e2 
                             WHERE e1.salary <= e2.salary))