问题:编写 SQL 查询以查找表中列中的第二大值。
例子:
在第一个示例中,在“收入”列中找到第二个最大值,在第二个示例中,在“成本”中找到第二个最大值。
Input: Table name- Employee
+------+--------+
| Name | Income |
+------+--------+
| abc | 4000 |
| xyz | 4752 |
| qwe | 6579 |
+------+--------+
Output: 4752
Input: Table name- price_list
+-------------+--------+
| Item | Cost |
+-------------+--------+
| Apple | 150 |
| Banana | 175 |
| Mango | 200 |
| Pineapple | 180 |
+-------------+--------+
Output: 180
方法一:
句法:
SELECT MAX (column_name)
FROM table_name
WHERE column_name NOT IN (SELECT Max (column_name)
FROM table_name);
首先,我们从表中的那一列中选择了最大值,然后我们再次在该列中搜索最大值,排除已经找到的最大值,因此得到第二个最大值。
- 示例 1:
SELECT MAX (Income) FROM Employee WHERE Salary NOT IN (SELECT Max (Income) FROM Employee);
- 示例 2:
SELECT MAX (Cost) FROM price_list WHERE Salary NOT IN (SELECT Max (Cost) FROM price_list);
方法 2:
句法:
SELECT column_name
FROM table_name e
WHERE 2 = (SELECT COUNT (DISTINCT column_name)
FROM table_name p
WHERE e.column_name<=p.column_name)
这是一个嵌套子查询,它是一个通用 SQL 查询,用于打印列中的第 N 个最大值。对于外部查询处理的每条记录,将执行内部查询并返回有多少记录的值小于当前值。如果您正在寻找第二高的值,那么一旦内部查询返回 2,您的查询就会停止。
- 示例 1:
SELECT Income FROM Employee e WHERE 2=(SELECT COUNT(DISTINCT Income) FROM Employee p WHERE e.Income<=p.Income)
- 示例 2:
SELECT Cost FROM price_list e WHERE 2=(SELECT COUNT(DISTINCT Cost) FROM price_list p WHERE e.Cost<=p.Cost)