gpt4 book ai didi

java - 分组时如何根据一个字段中最长的 'string'从mysql数据库中选择记录?

转载 作者:行者123 更新时间:2023-11-29 03:22:25 24 4
gpt4 key购买 nike

这是我的 table :

ID    Title    Content    Cluster
1 a abc 1
2 b abcde 1
3 c abcde 1
4 d abc 2
5 e abcdef 2

我想根据字段内容中最长的“字符串”并按簇分组来选择记录。我该怎么做。

期望的结果:

ID    Title    Content    Cluster
3 c abcde 1
5 e abcdef 2

怎么做?

最佳答案

使用self join,你可以找出每个簇中所有长度最大的行:

select a.*
from my_table a
left join my_table b
on a.cluster = b.cluster
and length(a.content) < length(b.content)
where b.cluster is null;

SQL Fiddle Demo

另一种方法是在子查询中使用 group by:

select a.*
from my_table a
inner join (
select cluster, max(length(content)) len
from my_table
group by cluster
) b on a.cluster = b.cluster and length(a.content) = b.len;

此外,如果内容包含 Unicode 字符,则使用 char_length 而不是 length 函数。

SQL Fiddle Demo

编辑:

为了清除长度上的关系,您可以获得具有最高 ID 的行(或根据您的需要最低):

select a.*
from cluster_sosial a
left join cluster_sosial b
on a.cluster = b.cluster
and (
length(a.content) < length(b.content)
or (length(a.content) = length(b.content) and a.cluster_sosial_id < b.cluster_sosial_id)
)
where b.cluster is null;

Demo

使用相关子查询

SELECT 
*
FROM
cluster_sosial a
WHERE
cluster_sosial_id = (SELECT
cluster_sosial_id
FROM
cluster_sosial B
WHERE
a.Cluster = b.Cluster
ORDER BY LENGTH(content) DESC , cluster_sosial_id DESC
LIMIT 1)

Demo

关于java - 分组时如何根据一个字段中最长的 'string'从mysql数据库中选择记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41972656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com