第八章 SQL聚合函数 MAX

说实话,我写的关于MAX函数的描述还是比较全面的,但说实话,作为阅读文本来说有点干巴巴的。
刚学SQL的时候,我分不清MAX和MIN的区别,直到老师举了个例子——
我记得招聘系统里有一张表,有一个字段叫“最高薪资期望”。
直接使用SELECT MAX(salary)进行查询,结果就是所有重复条目中期望的最高工资。
就算有人填5 00万,那也绝对是5 00万。
这次你要小心了。
有些HR可能会重复这个数字,不管实际能力如何。

有趣的是更复杂的字符串场景。
例如,“部门名称”是默认排序为 ASCII 码的字段。
“经济系”位于“技术系”之前,因为“经济”的 ASCII 小于“技术”。
当时我在群里讨论这个问题,发现“研发部”的遗留系统写成了“研发部”。
音程不同,实际上和弦的处理也不同。
后来我们想出了一个规则,对所有带空格的字符串进行处理,解决了那种混乱的问题。

混合类型的数据也可能导致陷阱。
例如,如果您使用 MAX 检查包含零的浮点字段,结果将是找到的第一个非零值。
报告遇到了一次错误。
明明是要统计全国销量的,但由于没有填写某个国家的数据,所以只能直接输入其他国家的销量。
最后我发现我必须添加一个COALESCE函数将NULL先更改为0然后再检查。

要说团体使用的话,才是最有用的任务。
当我要分析用户行为时,我想看到每个城市的用户代理的最大消耗。
SQL写成SELECT City, MAX(Amount) FROM Orders CIRCLE FROM City,简单粗暴,效率相当高。
但请注意,该查询返回的是每个城市的TOP消费金额,而不是任意用户的最大消费金额。

使用 MAXOVER 的 Windows 函数比较复杂,但它确实可以做一些很棒的工作。
例如,您要计算每个销售团队中薪资高于平均薪资的成员比例。
这种工作用MAX是无法完成的。
您应该使用 AVG GRACE 或 DENSE_RANK。

但是有人使用MAX大小写来检查字符串的长度是非常不合适的。
例如,SELECT MAX(LANGTH(Email)) from Users 直接统计所有电子邮件中最长的电子邮件。
我见过前端开发人员使用 CSS 来增大事件的字体大小。
最终页面直接炸了,因为有用户的邮箱有“认证账号+1 2 3 4 5 6 7 8 9 01 2 3 4 5 6 7 8 9 01 2 3 4 5 6 7 8 9 0@example.com”。
然后他剃了光头,说道:“怎么字突然变长了?”也就是说,这是字符串长度最简单的原因。

我自己不运行这个,但我听说在分布式数据库上使用 MAX 可能会很慢,尤其是当表非常大时。
我记得数据大约是1 0个,但我建议你检查你正在使用的数据库系统的公共文档。

SQL MAX() 函数如何查找一列中的最大值?

这就是陷阱。
忽略 MAX() 函数参数检查。

这里的陷阱是它不能保证查询结果是正确的。

实用提醒:使用前请测试MAX()函数的返回值。