非数字列中的SQL MAX函数
据我所知,MAX函数将返回给定列的最大值。对于数值,例如工资列,这对我来说很清楚——这是我在教程中找到的唯一应用程序。然而,我有一个问题要理解它在非数字列的情况下是如何工作的 我的问题源于这个练习(在sql-ex.ru上) 找出只生产同一型号的制造商,这些型号的数量超过1。 “产品”表包括制造商、型号和类型(“PC”、“笔记本电脑”或“打印机”)的相关信息。 解决方案之一是:非数字列中的SQL MAX函数,sql,select,max,Sql,Select,Max,据我所知,MAX函数将返回给定列的最大值。对于数值,例如工资列,这对我来说很清楚——这是我在教程中找到的唯一应用程序。然而,我有一个问题要理解它在非数字列的情况下是如何工作的 我的问题源于这个练习(在sql-ex.ru上) 找出只生产同一型号的制造商,这些型号的数量超过1。 “产品”表包括制造商、型号和类型(“PC”、“笔记本电脑”或“打印机”)的相关信息。 解决方案之一是: SELECT maker, MAX(type) AS type FROM product GROUP
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
最大值(类型)在我看来似乎是一个随机值,例如,为什么制造商B的结果是PC而不是笔记本电脑?为什么E是打印机而不是PC
满桌函数
MAX
、MIN
等应用于文本列时使用字典顺序。因此,MAX(type)将返回“Printer”而不是“PC”,因为“Printer”按字母顺序在“PC”之后(大于)
请注意,在第一个查询中,条件
具有COUNT(distinct type)=1意味着每个组只能有一个type
值。使用select中的MAX(type)
子句是因为不能在select中使用type
,因为它不在GROUP BY
子句中。在字符列中,MAX在排序顺序中找到最高值。在PC和笔记本电脑中,“P”符号在“L”符号之后,所以最大结果是PC。打印机和PC:第一个字母相等,但“r”符号在“C”之后,所以最大结果是打印机。MAX()
用于字符串的值按字母顺序和长度计算,a
b
,但ab
a
在您的情况下,HAVING
子句限制了type
值对于给定生成器的所有记录都是相同的,因此MAX()
和groupby
仅用于返回一行,它返回的type
的哪个值无关紧要,因为它们对于所有可以返回的行都是相同的
如果您更改第二个查询,它可能会帮助您了解这一切是如何进行的:
SELECT maker
, MAX (type) AS maxType
, MIN (type) AS minType
, COUNT(DISTINCT type) AS QTY
, COUNT(model) AS Models
FROM product
GROUP BY maker
ORDER BY maker
演示:
第一个查询也可以重写为:
SELECT maker
, MIN(type)
FROM product
GROUP BY maker
HAVING MAX(type) = MIN(type)
AND COUNT(model) > 1
ORDER BY maker
我明白了-如果类型在GROUP BY子句中,它将产生不同的结果,返回所有可能的maker和type组合?@Bartias确切地说,它将为每个不同的组合maker类型创建不同的组,并且SELECT子句中的聚合函数将应用于这些较小的组