我为新闻文章进行聚类。我将许多数据分类为多个集群。我想要做的是从每个具有最长文本内容的群集中获取一个数据。
我有两个表,我想加入那两个表,只显示文本最长的记录。
我的桌子:
表新闻内容
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
我该怎么做?
答案 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
有些人会抱怨,但如果它有效,那就有效!