查找组或字段中的最大值或最小值的记录

注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容。 本页面是自动翻译的,可能包含语法错误或不准确之处。 我们的目的是使此内容能对你有所帮助。 可以在本页面底部告诉我们此信息是否对你有帮助吗? 请在此处查看本文的英文版本以便参考。

本文介绍如何在 Access 中使用上限值查询来查找一组记录中的最大值或最小值。 你可以使用上限值查询来回答各种商业问题, 例如哪些产品的销售效果很好, 哪些产品不能。

想进行什么操作?

了解上限值查询

查找包含最大值或最小值的记录

查找类别或组中记录的上限值或下限值

查找包含最大值和最小值的记录

了解上限值查询

当您需要查找表字段中包含最大值或最小值的记录时, 请使用上限值查询。 你可以使用上限值查询回答以下类型的问题。

  • 哪种产品最贵或最廉价?

  • 哪些三名员工有下一个生日?

  • 在当前年度中, 哪些部门生成了最大或最小销售额?

  • 哪些产品占据最高或最低五% 的销售额?

  • 每个产品类别中的哪些产品占据最大或最小的 5% 的销售额?

简单地放上值查询, 对数据进行排序, 然后筛选数据以返回字段中的最大值或最小值。 你可以使用上限值查询来搜索数字 (包括货币) 和日期值。

创建上限值查询的过程遵循以下主要步骤:

  • 创建 "选择查询" 或 "总计查询"。

    您可以使用选择查询在表中查找上限值或下限值。 使用总计查询在一个或多个类别中查找上限值或下限值。 例如, 如果您想要回答 "什么是最贵或最廉价的产品" 之类的问题, 请首先创建一个选择查询。 若要回答诸如 "我们的每个产品类别中的哪些产品占销售额的上限或下限百分比" 的问题, 请使用总计查询。 此外, 你可以使用这两种类型的查询, 在一组记录或属于类别的记录中查找最大值和最小值。

  • 对查询应用排序顺序。

  • 对查询应用其他条件。

  • 指定希望查询返回的记录数。 你可以指定百分比 (如字段中值的前5个百分点), 也可以指定固定的数字, 如字段中的前10个值。

在上限值查询和筛选器之间进行选择

若要确定是否应创建上限值查询或应用筛选器, 请考虑以下事项:

  • 如果要返回字段中包含最大值或最小值的记录, 并且不知道确切的顶部或底部字段值 (或者它们无关紧要), 请创建上限值查询。

  • 如果你想要返回字段中的值匹配的所有记录, 或者小于或大于你感兴趣的值, 请应用筛选器。 例如, 若要查看价格介于 $50 和 $100 之间的产品, 请应用筛选器。 下图显示了查询设计视图中的示例筛选器和此类筛选器可以生成的结果:

    价格介于 $50 和 $100 之间的产品

    有关创建和使用筛选器的详细信息, 请参阅文章应用筛选器以查看 Access 数据库中的选择记录

创建和使用上限值查询的规则

在执行操作时, 请记住, 无论查询类型是什么 (选择查询或总计查询), 都必须使用包含描述性数据的字段 (例如, 员工或产品名称), 以及包含要查找的上限值或下限值的字段 (如价格或 da)。te 域。 您可以使用多个数据字段, 并且, 如果您使用总计查询, 则数据字段通常应包含类别信息, 例如城市或国家/地区字段。 只有当你创建对所有记录运行的总计查询 (如 "显示最昂贵订单的前 5%") 时, 才能省略类别数据。 此外, 你可以使用 select 或总计查询来查找一组属于类别的记录或记录中的上限值和下限值。 有关执行此操作的详细信息, 请参阅本文后面的查找类别或组中的记录的上限值或下限值一节。

查找包含最大值或最小值的记录

本部分中的步骤介绍了如何创建基本的上限值查询和更高级的查询。 第一步演示上限值查询的基本部分, 而第二部分介绍如何查找接下来的几个员工生日。 这些步骤使用以下示例表:

姓氏

名字

地址

城市

国家/地区

出生日期

录用日期

刘鹏

Josh

1 Main St.

New York

USA

05-1968 年2月-

10月10日-1994

Heloo

Waleed

52 1st St.

Boston

USA

22-5 月-1957

1996年11月22日-

Guido

潘杰

3122 75th Ave. S.W.

Seattle

USA

1960年11月11日-

2003年3月11日-2000

Bagel

部门 Philippe

1 Contoso Blvd.

London

英国

1964年3月22日

22日-1998

价格

Julian

Calle Smith 2

墨西哥城

Mexico(墨西哥)

05-6 月-1972

05-2002 年1月

Hughes

Christine

3122 75th (圣)

Seattle

USA

1970年1月23日

23-1999 年4月

Riley

67 Big St.

Tampa

USA

1964年4月14日-

10月14日-2004

Birkby

Dana

2 Nosey Pkwy

珠海

USA

10月29日-1959

1997年3月29日-

Bagel

部门 Philippe

1 Contoso Blvd.

London

英国

1964年3月22日

1998年6月20日

如果需要, 您可以手动输入此示例表中的数据, 也可以将此表复制到电子表格程序 (例如 Microsoft Excel), 然后将生成的工作表导入Access中的表。

注意: 如果您没有电子表格程序, 则可以将示例数据复制到文本编辑器 (如记事本) 中。 有关导入文本数据的详细信息, 请参阅导入或链接文本文件中的数据一文。

创建基本的上限值查询

  1. 在“创建”选项卡上的“查询”组中,单击“查询设计”。

  2. 在 "显示表" 对话框中, 单击要在查询中使用的表, 单击 "添加" 以将表放置在设计网格中, 然后单击 "关闭"。
    -或-
    双击表。
    如果使用示例数据, 请将 "雇员" 表添加到查询中。

  3. 将要使用的查询中的字段添加到设计网格中。 双击每个字段, 或将每个字段拖放到 "字段" 行中的空白单元格上。
    如果使用示例表, 请添加 "名字"、"姓氏" 和 "出生日期" 字段。

  4. 在包含上限值或下限值的字段 ("出生日期" 字段中, 如果使用示例表), 请单击 "排序" 行, 然后选择 "升序" 或 "降序"。
    如果 "值" 字段包含数字 (如 "价格" 或 "销售额"), 则 "升序" 排序次序返回最小值, 而 "降序" 排序次序返回最大值。 如果 "值" 字段包含日期, 则 "降序" 排序顺序将返回最近的日期, 而 "升序" 则返回最早的日期。

    重要: 对于包含上限值或下限值的字段, 必须将 "排序" 行设置为 "升序" 或 "降序"。 如果您指定的字段的排序顺序不是包含上限值或下限值的字段 (例如, "产品名称" 而不是 "价格"), 则查询不会返回所需的结果。

  5. 在 "设计" 选项卡上的 "查询设置" 组中, 单击 "返回" 旁边的向下箭头 (上限值列表), 然后输入要查看的记录的数量或百分比, 或从列表中选择一个选项。

  6. 单击 "运行" 以运行查询并在数据表视图中显示结果。

  7. 保存查询并将其保持打开状态, 以便在后续步骤中使用。

你可以看到这种类型的上限值查询可以回答一些基本问题, 例如谁是公司中最早或 youngest 的人员。 接下来的步骤介绍了如何使用表达式和其他条件为查询添加强大功能和灵活性。 下一步中显示的条件返回接下来的三个员工生日。

向查询添加条件

注意: 这些步骤假定你将使用上一节中所述的查询。

  1. 在 "设计" 视图中打开在前面的步骤中创建的查询。

  2. 在查询设计网格中, 在 "出生日期" 列右侧的列中, 复制并粘贴或键入表达式表达式 1: DatePart("m", [出生日期])DatePart函数提取 "出生日期" 字段中的值的月份部分。

  3. 在包含您的表达式的列右侧, 复制并粘贴或键入表达式表达式2: DatePart("d", [出生日期])。 在这种情况下, DatePart函数提取 "出生日期" 字段中的值的日部分。

  4. 清除每个表达式的 "显示" 行中的复选框, 然后单击每个表达式的 "排序" 单元格, 然后选择 "升序"。

  5. 或者, 你可以指定条件来限制查询的范围。 当你指定条件时, 查询仅对满足条件的记录进行排序, 并在排序列表中标识最大或最小字段值。
    若要继续处理示例数据, 请在 "出生日期" 字段的 "条件" 行中键入或复制并粘贴以下表达式:

    month ([出生日期]) > Month (Date ()) 或 Month ([出生日期]) = Month (date ()) 和 Day ([出生日期]) >Day (date ())

    此表达式将执行以下操作:月份 ([出生日期]) > Month (Date ())部分检查每个员工的出生日期, 查看其是否属于将来的某个月, 如果为 true, 则在查询中包含这些记录。 month ([出生日期]) = Month (Date ()) 和 Day ([出生日期]) >Day (date ())部分中的表达式检查当前月中发生的出生日期, 以查看出生日期是否等于或晚于当前日期。 如果该条件为 true, 则该函数将在查询结果中包含这些记录。 若要进行汇总, 此表达式将忽略出生日期介于1月1日和运行查询日期之间的任何记录。

    若要查看更多有关查询条件表达式的示例, 请参阅查询条件示例一文。

  6. 在 "设计" 选项卡上的 "查询设置" 组中, 单击 "返回" 旁边的向下箭头 (上限值列表), 然后输入要查看的记录的数量或百分比, 或从列表中选择一个选项。

  7. 单击 "运行" 以运行查询并在数据表视图中显示结果。

如果查询返回比预期更多的记录

如果数据中包含共享日期值的记录, 则上限值查询可能会返回比预期更多的数据。 例如, 您可以设计一个上限值查询来检索三个员工记录, 但实际上您看到的是四个, 因为 "孙" 和 "Edwards" 共享生日。 这种类型的查询将返回所有上限值, 而不管有多少条记录具有这些值。 若要排除重复值, 可以将名为 "唯一" 值的属性设置为"是"。 有关使用该属性的详细信息, 请参阅本文后面的查看重复记录一节。

LastName

出生

Johnson

9/26/1968

10/2/1970

Edwards

10/15/1965

10/15/1969

如果查询返回比预期更少的记录

假设你设计了一个查询以返回字段中的前五条记录, 但你只看到三条记录。 通常, 你可以通过在 "设计" 视图中打开查询, 并查看设计网格中的 "条件" 行中的 "条件" 行 (其限制比所需的更多) 来解决该类型的问题。 有关条件的详细信息, 请参阅查询条件示例一文。

如果看到重复记录

如果上限值查询返回重复项, 则基础表中包含重复记录, 或者记录显示为重复记录, 因为该查询不包含可区分记录的字段。 例如, 下面的查询显示最近发货的五个订单, 以及处理交易的销售人员的姓名。

发货

销售人员

11/12/2004

Fontana

11/12/2004

Moreno

10/12/2004

Osada

10/12/2004

Osada

10/12/2004

Fontana

第三条和第四条记录看起来是重复的, 但可能是因为销售人员 Osada 处理在同一天发货的两种不同订单。

根据你的需求, 你可以执行以下两项操作之一来避免返回重复记录。 你可以更改查询的设计以添加有助于区分记录的字段, 例如 "订单 id" 和 "客户 id" 字段。 或者, 如果只需查看重复记录之一, 则可以通过将查询的 "唯一值" 属性设置为"是"来仅显示不同的记录。 若要设置此属性, 请在查询设计视图中按 F4 以显示查询的属性表, 找到 "唯一值" 属性, 然后将其设置为"是"

有关处理重复记录的详细信息, 请参阅使用查询查找重复记录一文。

返回页首

查找类别或组中记录的上限值或下限值

你可以通过创建总计查询来查找属于组的记录的最大值或最小值。 在执行操作时, 请记住, 默认情况下, 总计查询只能包含包含您的组数据的一个或多个字段, 如 "类别" 字段, 以及具有上限或下限值的字段, 如 "price" 字段。 总计查询不能包含描述类别中的项目的其他字段。 但是, 您可以创建包含总计查询中的字段的第二个查询, 以及包含描述性数据的其他表中的字段。

例如, 假设您有一个产品表, 并将每个产品分配到一个类别, 如 "董事会游戏"、"测验题" 等。 如果创建总计查询以标识每个类别中最贵的产品, 则该查询只能包含包含该分类数据的一个或多个字段, 以及包含价格数据的字段。 在此示例中, 假设名为 "类别名称" 的字段和名为 "价格" 的字段。 当您运行这种类型的查询时, Access 会将 "MaxOf" 或 "MinOf" (具体取决于所选的函数) 追加到 "价格" 字段的开头, 如下所示:

类别名称

MaxOfPrice

棋盘游戏

$55.00

$43.90

计算机游戏

$263.50

Dolls

$81.00

...

...

总计查询不能包含有助于说明产品的其他字段 (从而使数据更易于理解), 例如产品名称或供应商名称, 如下所示:

类别名称

MaxOfPrice

产品名称

供应商名称

棋盘游戏

$55.000

c + + 趣味

Proseware, inc. 保留所有权利。

$43.90

关系数据库图表

Lucerne 出版公司

计算机游戏

$263.50

计算机 Geeks 和 Mythical Creatures

Litware, Inc.

Dolls

$81.00

程序员操作图

Contoso, 有限公司

...

...

...

...

如果要查看描述性数据, 可以创建第二个选择查询, 将总计查询中的字段与其他数据字段合并在一起。

本部分中的步骤介绍了如何创建总计查询, 以及如何选择所需的查询来标识每一组类别中最贵的产品。 这些步骤假定使用以下示例表:

"类别" 表

CategoryID

类别名称

说明

1

棋盘游戏

所有年龄和技能级别

2

七巧板、word 谜题和谜题玩具

3

计算机游戏

所有控制台和技能级别

4

Dolls

操作数字, 方式 dolls

5

体育设备

球、衣服、nets

6

模型/业余爱好

飞机、汽车、火车

"供应商" 表

id

供应商名称

1

Fabrikam

2

Tailspin Toys

3

罗斯文商贸

4

嘉元实业

5

Lucerne 出版公司

6

Proseware, inc. 保留所有权利。

7

Contoso, 有限公司

8

世界内导入

9

Wingtip 玩具

10

世界内导入

11

Litware, Inc.

12

Southridge 视频

"产品" 表

产品名称

id

CategoryID

价格

程序员操作图

7

4

$12.95

c + + 趣味

6

1

$15.85

关系数据库图表

5

2

$22.50

神奇计算机芯片

3

2

$32.65

进入! 游戏!

1

1

$22.95

计算机 Geeks 和 Mythical Creatures

11

3

$78.50

在计算机 Geeks 中练习! DVD!

4

5

$14.88

终极飞出比萨饼

2

5

$36.75

外置5.25 寸软盘驱动器 (1/4 扩展)

8

6

$65.00

Manager 非操作图

9

4

$78.88

Gloom

12

3

$53.33

构建自己的键盘

1

6

$77.95

注意: 这些步骤也假设在 "类别" 和 "产品" 表之间具有一对多关系, 而 "供应商" 和 "产品" 表之间也是相同的。 在这种情况下, 这些表共享 "供应商 id" 和 "类别 id" 字段。 在下一部分中介绍的总计查询将无法正常工作, 而不会有关系。

创建总计查询

  1. 在“创建”选项卡上的“查询”组中,单击“查询设计”。

  2. 在 "显示表" 对话框中, 选择要处理的表, 单击 "添加", 然后在添加完表之后单击 "关闭"。
    -或-
    双击要使用的表, 然后单击 "关闭"。 每个表都将显示在设计网格中。 如果你使用上面列出的示例表, 请添加 "类别" 和 "产品" 表。

  3. 双击要在查询中使用的表字段。
    此时, 请确保仅将组字段和值字段添加到查询中。 如果你使用上表中列出的示例数据, 请从 "类别" 表中添加 "类别名称" 字段, 以及 "产品" 表中的 "价格" 字段。

  4. 或者, 你可以指定条件来限制查询的范围。
    只有符合条件的记录才会进行排序, 并且在此排序的列表中将标识最大和最小字段值。 例如, 若要排除 "体育" 类别中的产品, 请将此表达式添加到 "类别名称" 字段的 "条件" 行中: <> "体育"
    若要查看更多有关查询条件表达式的示例, 请参阅查询条件示例一文。

  5. 将查询转换为总计查询。

    1. “设计”选项卡上的“显示/隐藏”组中,单击“总计”

      "汇总" 行显示在设计网格中。

  6. 确保每个组字段的 "总计" 单元格都设置为 "分组依据", 然后将 "值" 字段的 "总计" 单元格 (包含上限或下限值的字段) 设置为 "最大" 或 "最小"。
    选择 "最大值" 将在 "日期/时间" 字段中返回一个数字字段中的最大值和最新的日期或时间值。 选择 "最小值" 将返回数字字段中的最小值, 以及 "日期/时间" 字段中最早的日期或时间值。 如果使用示例数据, 请将 "类别名称" 字段的"总计" 单元格设置为 "分组依据", 将 "价格" 字段的 "总计" 单元格设置为 "最大值"

  7. 在 "设计" 选项卡上的 "工具" 组中, 确保将 "返回" 列表设置为 "全部", 然后单击 "运行" 以运行查询并在数据表视图中显示结果。

    注意: 根据你在步骤7中选择的函数, Access 会将查询中的 value 字段的名称更改为MaxOffieldname 或MinOffieldname。 如果你使用示例表, Access 将重命名字段MaxOfPriceMinOfPrice

  8. 保存查询并转到下一步。

查询不会返回产品名称或有关产品的任何其他信息。 若要查看其他数据, 您需要创建第二个查询来合并刚才创建的查询。 接下来的步骤介绍了如何创建第二个查询。

创建第二个查询以查看更多数据

  1. 在“创建”选项卡上的“查询”组中,单击“查询设计”。

  2. 在 "显示表" 对话框中, 单击 "查询" 选项卡, 然后双击您在上一节中创建的总计查询。

  3. 单击 "" 选项卡, 然后添加您在总计查询中使用的表以及包含要查看的其他相关数据的表。
    如果您使用前面列出的示例表, 请将 "类别"、"产品" 和 "供应商" 表添加到新查询中。

  4. 将总计查询中的字段联接到其父表中的对应字段。 若要执行此操作, 请将总计查询中的每个字段拖到其在表中的对应字段。

    如果使用示例数据, 请将总计查询中的 "类别名称" 字段拖动到 "类别" 表中的 "类别名称" 字段。 然后将 "总计" 查询中的 "MaxOfPrice" 字段拖动到 "产品" 表中的 "价格" 字段。 联接使你的新选择查询能够将总计查询中的数据和其他表中的数据放在一起。

  5. 在总计查询的窗口中, 双击星号以将整个查询添加到设计网格中, 然后从查询中的其他表中拖动其他字段。

    如果你使用示例表, 请双击你在上一部分中创建的总计查询, 然后分别在 "产品" 和 "供应商" 表中添加 "产品名称" 和 "供应商" 字段。

  6. (可选) 指定一个或多个列的排序顺序。
    例如, 若要按字母顺序列出类别, 请将 "类别名称" 列的 "排序" 单元格设置为 "升序"。

  7. 在“设计”选项卡上的“结果”组中,单击“运行”。

    这将运行查询并在数据表视图中显示结果。

提示: 如果您不希望 Price 列的标题显示为MaxOfPriceMinOfPrice, 请在 "设计" 视图中打开查询, 然后在网格中的 "价格" 列中, 键入 " price: MaxOfPrice " 或 "价格: MinOfPrice"。 这样做会使价格在数据表视图中显示为列标题。

返回页首

查找包含最大值和最小值的记录

在本文中, 你之前创建的查询可以返回上限值或下限值, 但不能同时返回这两者。 如果要在单个视图中查看这两组值, 您需要创建两个查询, 一个用于检索上限值, 另一个用于检索最小值, 然后将结果合并并存储到一个表中。

查找最大值和最小值并在表中显示这些数据的过程遵循以下主要步骤:

  • 创建上限值查询和下限值查询, 或者, 如果需要对数据进行分组, 请创建使用MinMax函数的总计查询。

  • 将上限值查询 (或最大总计查询) 转换为生成表查询并运行此查询以创建新表。

  • 将下限值查询 (或最小总计查询) 转换为追加查询并运行此查询以将记录追加到上限值表。

    本部分中的步骤介绍了如何创建查询。

    注意: 除非您的数据库经过数字签名或驻留在受信任位置, 否则 Access 会阻止您运行此处所述的操作查询。 在尝试创建 "生成" 表并追加此处所述的查询之前, 请按照第一组步骤启用任何被阻止的内容。

    启用数据库中的内容

    • 在消息栏,单击“启用内容”

    • 再次运行查询。

  • 创建上限值查询和下限值查询。

    有关创建上限值或下限值查询所需的步骤, 请参阅本文前面的查找具有上限或下限值的记录一节。 如果需要按类别对记录进行分组, 请参阅本文前面的查找类别或组中的记录的上限值或下限值一节。

  • 保存每个查询并保持打开状态以便在后续步骤中使用。

创建生成表查询

  1. 在 "设计" 视图中打开上限值查询:

    在“设计”选项卡上的“查询类型”组中,单击“生成表”。
    将显示 "生成表" 对话框。

  2. 在 "表名称" 框中, 键入将存储顶部和底部记录的表的名称。 例如, 键入 "记录顶部和底部", 然后单击"确定"
    每次运行查询时, 查询都将创建一个表, 并将顶部值替换为当前数据, 而不是在数据表视图中显示结果。

  3. 保存并关闭查询。

创建追加查询

  1. 在 "设计" 视图中打开你的下限值查询。

  2. “设计”选项卡上的“查询类型”组中,单击“追加”

  3. 在 "追加" 对话框中, 键入您在 "生成表" 对话框中键入的相同名称。
    例如, 键入 "记录顶部和底部", 然后单击"确定"。 每次运行查询时, 查询都会在数据表视图中显示结果, 而不是在数据表视图中显示结果, 而 "记录" 表中将记录追加到 "记录"

  4. 保存并关闭查询。

运行查询

现在, 您已准备好运行这两个查询。

  • 在导航窗格中, 双击 "上限值" 查询, 然后在 "消息" 中单击"是"

  • 双击 "下限值" 查询, 然后在 "消息" 中单击"是"

  • 在数据表视图中打开顶部和底部的 "记录" 表。

返回页首

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×