SQL MAX函数在非数字列中

Bar*_*ias 20 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 
Run Code Online (Sandbox Code Playgroud)

我不明白max的功能 - 它算什么?我尝试了一个更简单的查询来理解它,但它只是让它变得更加困难.

SELECT maker,
       MAX(type) AS type, COUNT(type) AS QTY
FROM product
GROUP BY maker
ORDER BY maker
Run Code Online (Sandbox Code Playgroud)

返回的集合是

maker  type      QTY
A      Printer   7
B      PC        2
C      Laptop    1
D      Printer   2
E      Printer   4
Run Code Online (Sandbox Code Playgroud)

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

全表
http://i.stack.imgur.com/gObvQ.png

tro*_*dor 19

功能MAX,MIN等等.当应用到文本列使用词典顺序.因此,您的MAX(类型)将返回"打印机"而不是"PC",因为"打印机"按字母顺序位于(大于)"PC"之后.

请注意,在第一个查询中,条件HAVING COUNT(distinct type) = 1意味着type每个组只能有一个值.将MAX(type)在SELECT子句中使用,因为根本type无法选择使用,因为它不是在GROUP BY条款.


小智 6

在字符列中 MAX 查找整理序列中的最高值。在 PC 和笔记本电脑情况下:“P”符号位于“L”符号之后,因此 MAX 结果是 PC。打印机和 PC:第一个字母相同,但“r”符号在“C”之后,因此 MAX 结果是 Printer。