[英]Aggregate function in MySQL
我在 MySQL 中有下表,它只有两列。
First_name Last_name
---------------------------
Babara MacCaffrey
Ines Brushfield
Freddi Boagey
Ambur Roseburgh
Clemmie Betchley
Elka Twiddell
Ilene Dowson
Thacher Naseby
Romola Rumgay
Levy Mynett
我想提取具有最大长度(就字符数而言)的名字及其长度值。
我运行以下查询: select first_name, max(length(trim(first_name))) from customers
;
它返回以下部分不正确的输出。
Babara 7
虽然长度 (7) 是正确的,但返回的名字不正确。 Babara 只有 6 个字符(我确保它没有任何前导和尾随空格)。
有人可以帮我为什么会这样吗?
提前致谢!
我想提取具有最大长度(就字符数而言)的名字及其长度值。
不需要聚合。 order by
和limit
就足够了:
select name, char_length(trim(name)) name_length
from customers
order by name_length desc limit 1
如果你想允许联系,一种解决方案是使用窗口函数:
select name, name_length
from (
select name, char_length(trim(name)) name_length,
rank() over(order by char_length(trim(name)) desc) rn
from customers
) t
where rn = 1
max 返回每个分组的表达式的最大值,如果未指定 GROUP BY,则返回所有行的最大值。 在后一种情况下,它还会导致所有行隐式分组为一个。 它对其他被选中的列没有任何作用。 因此 first_name 将从被分组的任意一行中返回值(或者,如果使用推荐和默认的 sql_mode ONLY_FULL_GROUP_BY,会导致错误),与长度无关。
你只想:
select first_name, char_length(trim(first_name))
from customers
order by char_length(trim(first_name)) desc, first_name
limit 1
(也按名称排序,因此在关系的情况下你会得到确定性的结果)
请注意,您几乎不应该使用长度; 改为使用 char_length。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.