非数字列中的 SQL MAX 函数

2024-06-28

据我了解 MAX 函数,它应返回给定列的最大值。对于数值,例如工资列,对我来说很清楚 - 这是我在教程中找到的唯一应用程序。但是,我无法理解它在非数字列的情况下如何工作。

我的问题源于这个练习(在 sql-ex.ru 上)

找出只生产同类型型号的制造商,并且这些型号的数量超过1个。表“产品”包含有关制造商、型号和类型(“PC”、“笔记本电脑”或“打印机”)的信息。 解决这个问题的方法之一是:

SELECT maker,
       MAX(type) AS type
FROM   product
GROUP  BY maker
HAVING COUNT(DISTINCT type) = 1
       AND COUNT(model) > 1 

我不明白 max 的功能 - 它有什么用?我尝试了一个更简单的查询来理解它,但这只会让事情变得更加困难。

SELECT maker,
       MAX(type) AS type, COUNT(type) AS QTY
FROM product
GROUP BY maker
ORDER BY maker

返回的集合是

maker  type      QTY
A      Printer   7
B      PC        2
C      Laptop    1
D      Printer   2
E      Printer   4

在我看来, MAX(type) 显示一个随机值,例如为什么对于制造商B来说结果是PC而不是笔记本电脑?为什么E是打印机而不是PC?

Full Table
https://i.stack.imgur.com/gObvQ.png


功能MAX, MIN等应用于文本列时使用字典顺序。因此,您的 MAX(type) 将返回“Printer”而不是“PC”,因为“Printer”按字母顺序位于(大于)“PC”之后。

请注意,在您的第一个查询中,条件HAVING COUNT(distinct type) = 1意味着只能有一个type每个组的值。这MAX(type)使用 select 子句的原因很简单type不能在选择中使用,因为它不在GROUP BY clause.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非数字列中的 SQL MAX 函数 的相关文章

  • knex.where容易受到sql注入攻击吗?

    这是一个后续问题https stackoverflow com a 50337990 1370984 https stackoverflow com a 50337990 1370984 它提到knex table where descri
  • 如何使用 SQL 语法更改主键约束?

    我有一个表 其主键约束中缺少一列 我不想通过 SQL Server 对其进行编辑 而是想将其放入脚本中以将其添加为更新脚本的一部分 我可以使用什么语法来执行此操作 我必须删除并重新创建关键约束吗 是的 唯一的方法是使用 Alter 表删除约
  • 使用 JavaScript 清理 SQL 数据

    我有一堆具有各种输入元素的表单 我想在服务器端清理这些 yes 我使用服务器端 JavaScript 将这些输入用作参数 并防止特殊字符格式错误 在你走之前 比如 这不属于 JavaScript 的领域 等等 我正在使用一个价值数百万美元的
  • 案例与解码

    参考之前的一篇question https stackoverflow com questions 3193384 display sql custom text from table column result 我想知道是否总是可以更换D
  • 编写 MySQL 查询以获得所需结果

    我正在使用 MySQL 数据库 风险因素有四种类型 严重 高 中 低 表包含如下数据 id uaid attribute value time risk factor 1 1234 Edge Exist 16123 NONE 2 1234
  • 当用户单击链接时如何在表中创建新字段

    我的表格如下图所示 In order to insert data from this form into table I coded this supplier info supplier name POST supplier name
  • INSERT INTO 存储过程的输出

    我正在编写一个存储过程 首先在表中插入一个新行 然后 另一个查询需要此查询生成的 ID 是否可以使用 OUTPUT 访问预先生成的 ID 这就是我到目前为止所做的 这几乎是一个猜测 但没有成功 ALTER PROCEDURE dbo add
  • End using 是否关闭打开的 SQL 连接

    如果我将 SQLConnection 包装在 using 中 我应该关闭它还是最终 using 处理它 using cn as new system data sqlclient sqlconnection cn open do a bun
  • sp_MSforeachtable 在每个表上执行过程

    我想打印一些动态查询来对数据库中的所有表执行过程 这是我到目前为止所写的 EXEC SP MSFOREACHTABLE IF EXISTS SELECT FROM INFORMATION SCHEMA COLUMNS WHERE COLUM
  • 在 VBScript 中的 SQL 字符串中使用 Excel 命名范围

    我已经在这里和谷歌上搜索过 但仍然无法解决我的问题 我正在尝试在我的中等效地使用 Excel 的命名范围 vbs文件 下面的代码可以在 excel 中的 VBA 中运行 但我无法让它在 vbs file ThisWorkbook Sheet
  • 如何使用 SQL 计算一条路线的行驶次数?

    我需要确定在给定的日期范围内每辆车行驶特定路线的次数 但建立在数据库之上的 GPS 管理软件没有此功能 该数据库包含多个存储 GPS 路线和位置数据的表 路线由多个位置和序列号组成 位置是附加到名称的一组上限和下限纬度 经度值 车辆每分钟将
  • 如果值不为空,则更新数据库的 SQL 查询?

    我有一个大约有 17 个字段的表 我需要在此表中执行频繁更新 但问题是每次我可能只更新几个字段 在这种情况下编写更新查询的最佳方法是什么 我正在寻找一个选项 其中仅当值不为空时才会更新 例如 我在数据库中有四个字段 A B C D 用户更新
  • LINQ 中的日期差异逻辑

    我尝试从两个不同的数据库表访问数据 然后使用 C 中的 LINQ 将它们连接到两个字段上 我相信我有一个逻辑合理的整体工作方法 我遇到的部分问题是 我在连接两个表之前过滤了它们的数据 因为这些表的数据太多 会导致崩溃 主要问题是 对于其中一
  • 如何在 SQL Server 中引用触发器的“新”、“旧”行?

    所以我是 SQLite 的 SQL Server 新手 我习惯使用 New Old 关键字 我看到有些人使用insertedvalue 引用新创建的行 但这仅适用于插入而不适用于更新 我能得到类似的东西吗New我在这个查询中使用 creat
  • 恢复 woocommerce 订单

    最近 我的服务器团队更换了我的数据库 他们将我们以前的数据库放入其中 因此 我们丢失了某一天 特定日期 的订单详细信息 现在 服务器团队提供包含丢失当天订单详细信息的备份 现在请告诉我如何恢复这些订单 我无法用给定的备份替换我们的数据库 因
  • SQL仅选择列上具有最大值的行[重复]

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 这个问题在这里已经有答案了 我有这个文件表 这里是简化版本 id rev content 1 1 2 1 1 2 1 3 如何
  • Laravel 显示按年或月分组的记录详细信息

    我刚刚迁移到 Laravel 框架 并开始迁移一些遗留站点 但我遇到了 SQL 或 Blade 的问题 不知道是哪个 我必须显示大量的 运动类别 行 这些行按年份和月份分组 每个人都需要出勤等 我不确定继续走哪条路 我能够显示所有行并按日期
  • 导出数据库的 CREATE 脚本

    假设我已经在 pgAdmin 中创建了一个数据库 但我想导出一个 CREATE sql 文件 我将如何生成转储 以下是如何使用 pgAdmin 创建一个架构脚本 该脚本可以与 PostgreSql 数据库架构比较工具 例如apgdiff h
  • MySQL 将 COMMENT 添加到外键

    我正在将旧数据库 SyBase 转换为 MySQL 并且有以下 DDL 查询 ALTER TABLE DBA tab prodotto ADD FOREIGN KEY fkey idlinea tpr idlin REFERENCES DB
  • JavaFX ComboBox - 显示文本但在选择时返回 ID

    我有一个包含机场的数据库表 每个机场都有一个名称和一个 ID 在 JavaFX 中我有一个表单 其中包含ComboBox 组合框需要显示所有机场名称 并且在提交表单时需要将机场的 ID 插入数据库 而不是其名称 但我并没有真正弄清楚解决方案

随机推荐