簡體   English   中英

如何在分組時基於一個字段中最長的“字符串”從mysql數據庫中選擇記錄?

[英]How do I select record from mysql database based on the longest 'string' in one filed when grouping?

這是我的桌子:

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

怎么做?

使用自連接,您可以找出每個集群中具有最大長度的所有行:

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小提琴演示

另一種方法是在子查詢中使用分組依據:

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小提琴演示

編輯:

為了使長度保持一致,您可以獲取ID最高(或根據需要最低的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;

演示

使用相關子查詢

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)

演示

這是使用EXISTS一種方法

SELECT *
FROM   Yourtable a
WHERE  EXISTS (SELECT 1
               FROM   Yourtable B
               WHERE  a.Cluster = b.Cluster
               HAVING Max(Len(b.Content)) = Len(a.Content)) 

要么

SELECT *
FROM   yourtable a
WHERE  Content = (SELECT content
                    FROM   yourtable  B
                    WHERE  a.Cluster = b.Cluster
                    ORDER  BY Len(content) DESC Limit 1) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM