繁体   English   中英

MySQL 中的聚合函数

[英]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 bylimit就足够了:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM