sql - 非数字列中的SQL MAX函数

标签 sql select max

据我了解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?

全表

最佳答案

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

注意,在您的第一个查询中,条件HAVING COUNT(distinct type) = 1意味着每个组只能有一个type值。之所以使用select中的MAX(type)子句,是因为type不能在SELECT中使用,因为它不在GROUP BY子句中。

关于sql - 非数字列中的SQL MAX函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558620/

相关文章:

android - 在 SQLite 中使用日期时间获取本月和上个月的值

MySQL - 选择关系数据避免左连接的最快方法

sql - 从java中检索表中的最大列值

mysql - GROUP BY 显示所有不同的列

sqlite - SQLite最小/最大怪异行为

python - 在 nanmax 中指定轴时出现 Numpy 错误,而 nansum 在相同情况下工作

mysql - 如何在MySql中返回具有相同列值的行

mysql - SQL(如MySQL)如何构造多个条件?

mysql - 不同年份有两个月的 where 子句

MySQL 更新运行最大值