如何从我的 mysql 数据库中 select 最长的文本?
How can I select the longest text from my mysql database?
我对新闻文章进行聚类。我将一些数据分类到多个集群中。我想要做的是从每个包含最长文本内容的集群中获取一个数据。
我有两个 table,我想加入这两个 table 并只显示文本最长的记录。
我的 tables:
Table 新闻内容
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
Table 新闻群
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
我该怎么做?
您可以通过使用一系列联接来完成您想要的。但是,我感觉你的模式没有完全规范化。
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'
试试这个:
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
有些人会抱怨,但如果有用,那就有用!
我对新闻文章进行聚类。我将一些数据分类到多个集群中。我想要做的是从每个包含最长文本内容的集群中获取一个数据。
我有两个 table,我想加入这两个 table 并只显示文本最长的记录。
我的 tables:
Table 新闻内容
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
Table 新闻群
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
我该怎么做?
您可以通过使用一系列联接来完成您想要的。但是,我感觉你的模式没有完全规范化。
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'
试试这个:
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
有些人会抱怨,但如果有用,那就有用!