繁体   English   中英

如何从 mysql 中的 group by 和 groupconcat 其他字段中获取最大值?

[英]How to get max value from group by and groupconcat other field in mysql?

我试图获取所有 email 地址的最大值对应的行和 group_concat。

MySql表:

id  firstName LastName  email         value
1   John      Seam      sa@gmail.com   450
2   John      Seam      js@yahoo.com    0  
3   Richard   Min       aa@gmail.com    0 

预期 output:

id  firstName LastName   email                          value
1   John      Seam      sa@gmail.com|js@yahoo.com       450
3   Richard   Min       aa@gmail.com                     0 

我尝试了以下查询:

select id,firstName,LastName,group_concat(email) ,max(value) 
from table 
group by firstName,LastName

但它给出了错误的结果:

id  firstName LastName   email                          value
2   John      Seam      sa@gmail.com|js@yahoo.com       450
3   Richard   Min       aa@gmail.com                     0 

而不是 id 1 我得到 id 2。如果我删除 group_concat 它会给出正确的 output。

如果您想要具有value的行的id ,则将GROUP_CONCAT()用于按value DESC排序的 id,并使用 function SUBSTRING_INDEX()获取结果的第一个:

SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY value DESC), ',', 1) id,
       firstName, LastName,
       GROUP_CONCAT(email SEPARATOR '|') email,
       MAX(value) value
FROM tablename
GROUP BY firstName, LastName

请参阅演示
结果:

ID 邮件 价值
1 约翰 接缝 sa@gmail.com|js@yahoo.com 450
3 理查德 aa@gmail.com 0

这回答了问题的原始版本。

您的查询格式不正确 - selectgroup by不一致。 我会建议一种非常不同的方法:

select t.*,
       (select group_concat(t2.email)
        from table t2
       ) as emails
from table t
order by value desc
limit 1;

select id,firstName,LastName,group_concat(email),max(value) from table group by firstName,LastName

你可以使用这样的东西,如果你有不止一行 450,你还需要添加一个行号

CREATE TABLE Table1 (`id` int, `firstName` varchar(7), `LastName` varchar(4), `email` varchar(12), `value` int); INSERT INTO Table1 (`id`, `firstName`, `LastName`, `email`, `value`) VALUES (1, 'John', 'Seam', 'sa@gmail.com', 450), (2, 'John', 'Seam', 'js@yahoo.com', 0), (3, 'Richard', 'Min', 'aa@gmail.com', 0);
 SELECT t1.`id`, t1.`firstName`, t1.`LastName`,mailG,max_value FROM Table1 t1 INNER JOIN (SELECT `firstName`, `LastName`,GROUP_CONCAT(`email` SEPARATOR ' | ') mailG, MAX(`value`) max_value FROM Table1 GROUP BY `firstName`, `LastName`) t2 ON t1.`firstName` = t2.`firstName` AND t1.`LastName` = t2.`LastName` AND t1.`value` = t2.max_value
 编号 | 名字 | 姓氏 | 邮件G | 最大值 -: |:-------- |:-------- |:-------------------------- |  --------: 1 | 约翰 | 接缝 |  sa@gmail.com |  js@yahoo.com |  450 3 | 理查德 | 最小 |  aa@gmail.com |  0

db<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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