You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL获取各Source分组下最长URL的实现问题

解决方案

你的问题出在MySQL的GROUP BY逻辑上:当SELECT语句中包含非GROUP BY且非聚合函数的字段(比如pid、url)时,MySQL会返回分组内的任意一条记录,而非对应最长URL的那条。以下是两种可行的解决方法:

方法一:子查询关联原表

先通过子查询获取每个source对应的URL最大长度,再关联原表匹配出对应的记录:

SELECT t.pid, t.source, LENGTH(t.url) AS max_url_length, t.url
FROM your_table t
INNER JOIN (
    SELECT source, MAX(LENGTH(url)) AS max_len
    FROM your_table
    GROUP BY source
) sub 
ON t.source = sub.source AND LENGTH(t.url) = sub.max_len;
  • 注意:如果同一个source下存在多个长度相同的最长URL,该语句会返回所有符合条件的记录。若需仅返回一条,可添加DISTINCT或结合pid做进一步筛选(比如取MAX(pid))。

方法二:窗口函数(MySQL 8.0及以上版本)

利用窗口函数直接对每个source分组排序,筛选出最长URL的记录:

SELECT pid, source, url_length, url
FROM (
    SELECT 
        pid, 
        source, 
        url, 
        LENGTH(url) AS url_length,
        -- 若需并列最长URL都保留,用RANK();若仅取一条,用ROW_NUMBER()
        RANK() OVER (PARTITION BY source ORDER BY LENGTH(url) DESC, pid DESC) AS rnk
    FROM your_table
) t
WHERE rnk = 1;
  • 这里用RANK()会保留所有长度相同的最长URL;如果想强制只返回一条(比如按pid降序取最新的),替换成ROW_NUMBER()即可。

替换语句中的your_table为你的实际表名。

内容的提问来源于stack exchange,提问作者Sébastien Sutterlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:14:59