Navicat 博客

Selecting the Second Highest Value from a Table 2020 年 9 月 17 日,由 Robert Gravelle 撰写

有人说第二名是第一个失败者。那么,谁需要一个 SQL 语句来找出谁在成就者之下?令人惊讶的是,有很多人。实际上,此类查询的正式术语是“列的第 n 个最高值”。这是因为用于选择第二高值的技术也可以应用于任何值。在今天的文章中,我们将学习如何将 ORDER BY DESC 与 LIMIT 子句结合使用,以从表中获取第二高的值以及其他值。

介绍经典模型数据库

classicmodels 数据库是一个 MySQL 示例数据库,可帮助你快速有效地学习 SQL。classicmodels 数据库代表经典汽车比例模型的零售商。它包含典型的业务数据,例如客户、产品、销售订单、销售订单行项目等。

以下是Navicat Premium 中 payments 表的内容:

payments_table (171K)

我们将编写一个查询,从该表中选择第二高的付款。

关于 LIMIT 语句

LIMIT 子句可以添加到 SELECT 语句中,以限制返回的行数。LIMIT 子句可以接受一个或两个零或正整数的参数。

语法如下:

SELECT 
    select_list
FROM
    table_name
LIMIT [offset,] row_count;
  • offset 指定要返回的第一行的偏移量。第一行的偏移量是 0,而不是 1。
  • row_count 指定要返回的最大行数。

选择第二高的付款

知道了关于 LIMIT 子句的知识之后,我们现在可以如下构造 SELECT 语句以获取第二高的值:

SELECT * FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1,1;

这是从 payments 表中选择第二高 amount 的等效语句:

limit_query (48K)

验证结果

在 Navicat 中,我们可以将鼠标指针悬停在列标题上然后点击上下文菜单箭头来按任何列对表或视图进行排序。然后,我们可以从列表中选择排序顺序:

sort_menu (14K)

如果我们参考下图中高亮显示的行,则可以确认结果是正确的。

2nd_row_hightlighted (99K)

选择第 N 个最高的付款

我们可以使用相同的语法获取其他金额。例如,你可以使用以下语法返回列的第四高值:

SELECT * FROM yourTableName ORDER BY DESC yourColumnName LIMIT 3,1;

实际上,我们可以将这种语法用于任何排名:

SELECT * FROM yourTableName ORDER BY DESC yourColumnName LIMIT desiredRank - 1, 1;

这是获取第十高付款金额的查询:

10th_amount_query (48K)

总结

在今天的文章中,我们学习了如何结合使用 ORDER BY DESC 和 LIMIT 子句从表中获得第 N 个最高值。在下一篇文章中,我们将使用 TOP 语句完成相同的任务。

如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!

Navicat 文章
频道条目
分享
文章归档