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()
。