我为新闻文章做聚类。我将大量数据分类到多个集群中。我想要做的是从每个具有最长文本内容的集群中提取一个数据。
我有两个表,我想连接这两个表,并只显示文本最长记录。
我的表:
表新闻内容
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 我该怎么做呢?
发布于 2017-01-21 14:55:56
您可以通过使用一系列连接来完成您想要的操作。但是,我有一种感觉,您的模式并没有完全规范化。
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'发布于 2017-01-21 15:08:08
试试这个:
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有些人会抱怨,但如果它起作用了,它就起作用了!
https://stackoverflow.com/questions/41776525
复制相似问题