mysql - 在mysql中使用GROUP BY时如何选择最长的文本字段,a la MAX()?

标签 mysql sql group-by

在 MySql 中你可以使用 MAX() 函数在使用 GROUP BY 时获取最大值,我怎样才能做同样的事情来获取最长的字符串文字?

示例表:

id_|_post_id|_title__________|_body_____________________________________________
1  | ZXBF1J | Favorite Color | My favorite color is blue.
2  | ZXBF1J | Favorite Color | My favorite color is blue, no wait...
3  | ZXBF1J | Favorite Color | My favorite color is blue, no wait, yelloooow!
4  | AR3D47 | Quest          | To seek..
5  | AR3D47 | Quest          | To seek the Holy
6  | AR3D47 | Quest          | To seek the Holy Grail.

棘手的部分是我想 ORDER BY id ASC 以查看顶部最旧的条目,并且我想按 post_id 进行分组,这不是什么我可以用它来ORDER,得到最长的body

示例查询:

SELECT post_id, title, MAX(body) // obviously MAX() doesn't work here
FROM posts
GROUP BY post_id
ORDER BY id ASC

期望的输出:

post_id|_title__________|_body_____________________________________________
ZXBF1J | Favorite Color | My favorite color is blue, no wait, yelloooow!
AR3D47 | Quest          | To seek the Holy Grail.

再次关键是选择最长的body,同时保持基于id的顺序。

最佳答案

您需要使用 CHAR_LENGTH 而不是 LENGTH

SELECT a.id, a.post_id, a.body
FROM posts a INNER JOIN
(
    SELECT post_ID, title, MAX(CHAR_LENGTH(body)) totalLength
    FROM posts
    GROUP BY post_ID, title
) b ON a.post_id = b.post_ID AND
        a.title = b.title AND
        CHAR_LENGTH(a.body) = b.totalLength

您可能想看看区别: CHAR_LENGTH( ) vs LENGTH( )

SQLFiddle Demo

关于mysql - 在mysql中使用GROUP BY时如何选择最长的文本字段,a la MAX()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250514/

相关文章:

php - Laravel - 将 .txt 文件保存到 mySQL 数据库

mysql - 如何频繁同步市场数据并显示为历史时间序列数据

c# - Linq To SQL 和 Having

sql - 具有不同 ID 的列的总和?

MySQL:Inner Join with Group By 正在创建一个临时表(进行表扫描)

MySQL trim() 不删除字符串中的空格

javascript - 仅在数据库中设置一次

mysql - 在 View 中添加列 - 使用 MySQL Below v8 最后匹配条件

php - 在 PHP MySQL 上显示、连接、计数、分组 6 个表

sql - 如何在 PostgreSQL 中汇总语句?