如何从mysql数据库中选择最长的文本?

时间:2017-01-21 06:48:12

标签: mysql sql group-by sql-order-by

我为新闻文章进行聚类。我将许多数据分类为多个集群。我想要做的是从每个具有最长文本内容的群集中获取一个数据。

我有两个表,我想加入那两个表,只显示文本最长的记录。

我的桌子:

表新闻内容

news_id   title   content      category
   1      abcd    abcd            a
   2      abcd    abcdefg         a
   3      abcd    abcdefghij      a
   4      efgh    efgh            a
   5      efgh    efghijk         a
   6      efgh    efghijklmn      a
   7      ijkl    ijkl            b
   8      ijkl    ijklmn          b

表新闻集群

newscluster_id   news_id  category  cluster
      1             1        a        0
      2             2        a        0
      3             3        a        0
      4             4        a        1 
      5             5        a        1
      6             6        a        1

期望的输出:

news_id    title    content    category   cluster
   3       abcd    abcdefghij     a         0
   6       efgh    efghijklmn     a         1 

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用一系列连接来完成您想要的任务。但是,我觉得你的架构没有完全规范化。

SELECT t2.news_id,
       t2.title,
       t2.content,
       t2.category,
       t1.cluster
FROM newscluster t1
INNER JOIN newscontent t2
    ON t1.news_id = t2.news_id
INNER JOIN
(
    SELECT t1.cluster, MAX(CHAR_LENGTH(t2.content)) AS max_content_length
    FROM newscluster t1
    INNER JOIN newscontent t2
        ON t1.news_id = t2.news_id
    GROUP BY t1.cluster
) t3
    ON t1.cluster = t3.cluster AND
       CHAR_LENGTH(t2.content) = t3.max_content_length
-- WHERE t2.category = 'a'

答案 1 :(得分:0)

试试这个:

select * from (
    select a.*, cluster from newscontent a
    join newscluster b on a.news_id =b.news_id
    order by length(content) desc) x
group by cluster

有些人会抱怨,但如果它有效,那就有效!