Mysql 从包含三个冒号Id、名称和薪水的表中查找第二高的薪水
如何从一个包含三列的表中找到第二高的薪资,这些列是id、名称、薪资,但在自联接中使用。通过嵌套查询得到答案。但是,我想知道,如果只使用SELECT语句,我们如何使用自联接构建框架,为什么要联接呢 试试这个: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)
如果必须使用自联接,可以执行以下操作
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))