cwd*_*cwd 11 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.
Run Code Online (Sandbox Code Playgroud)
棘手的部分是我想要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
Run Code Online (Sandbox Code Playgroud)
期望的输出:
post_id|_title__________|_body_____________________________________________
ZXBF1J | Favorite Color | My favorite color is blue, no wait, yelloooow!
AR3D47 | Quest | To seek the Holy Grail.
Run Code Online (Sandbox Code Playgroud)
同样,关键是选择最长的,body同时维持基于的顺序id.
Joh*_*Woo 12
你需要使用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
Run Code Online (Sandbox Code Playgroud)
您可能希望看到差异:CHAR_LENGTH()vs LENGTH()
select p.post_id, p.title, p.body
from posts p
inner join (
select post_id, max(length(body)) as MaxLength
from posts
group by post_id
) pm on p.post_id = pm.post_id and length(p.body) = MaxLength
order by p.id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8752 次 |
| 最近记录: |