Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询以获取每个用户的最长昵称_Mysql - Fatal编程技术网

Mysql SQL查询以获取每个用户的最长昵称

Mysql SQL查询以获取每个用户的最长昵称,mysql,Mysql,我有以下简单的表格: User Id | Nickname 1 | abcdef 1 | abdc 1 | a 2 | x 2 | xyz 2 | zyztx 一个用户可以有多个昵称。我想编写一个查询,返回每个用户最长的昵称。我的查询应返回以下内容: User Id | Nickname 1

我有以下简单的表格:

User Id    |    Nickname

1          |     abcdef
1          |     abdc
1          |     a

2          |     x
2          |     xyz
2          |     zyztx
一个用户可以有多个昵称。我想编写一个查询,返回每个用户最长的昵称。我的查询应返回以下内容:

User Id    |    Nickname

1          |     abcdef

2          |     zyztx

如何编写这样的查询?

我个人认为这很简单(但这是您的经验),可以通过使用相关子查询来找到用户ID的最大长度,并在where条件下使用它来实现

drop table if exists t;
create table t
(UserId  int  ,  Nickname varchar(20));
insert into t values
(1                   ,     'abcdef'), 
(1                   ,     'abdc' ),
(1                   ,     'a'),
(2                   ,     'x' ),
(2                   ,     'xyz'), 
(2                   ,     'zyztx');

select userid,nickname
from t
where length(nickname) = (select max(length(nickname)) from t t1 where t1.userid = t.userid);

+--------+----------+
| userid | nickname |
+--------+----------+
|      1 | abcdef   |
|      2 | zyztx    |
+--------+----------+
2 rows in set (0.00 sec)

你研究过MySQL的聚合特性吗?你看过手册了吗?你试过了吗?它看起来像什么?聚合函数在这里不起作用,max只对数字起作用max只对数字起作用不对字符串起作用,虽然在您的情况下,您可以将其用于数字,因为字符串的长度是数字。@forpas那么正确的答案是什么?这是正确的答案:如果用户有多个具有相同最大长度的昵称,会发生什么情况?如果出现这种情况,则查询需要选择元音数最少的昵称,这是否可以写入?然后您将得到两行-您可以添加一个DISTINCT子句,但如果它们都具有最大长度但具有不同的值,您仍将得到两行。我不会说WHERE子句中具有聚合的相关子查询是“微不足道的”。顺便说一句:AFAIK
length()
计算字节数。如果要计算多字节字符集字符串中的字符数,应使用
char\u length()