如何创建一个sql字符串,用groupby对选中的行进行计数

niknxzdl  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(392)

我正在尝试查询一个mysql数据库,其中包含author、title、text列,以便按给定的标题、按作者分组的所有文本示例计数,例如,我的表如下所示

如果我的参数是“远大前程”,那么狄更斯的《远大前程》有两个条目,凯西·阿克的《远大前程》有一个条目。

[{author=Charles Dickens, title=Great Expectations, count=2}, {author=Kathy Ackers, title=Great Expectations, count=1}]

到目前为止,我已经想出了这个字符串:

jdbcTemplate.queryForList("SELECT author, title, COUNT(*) as count FROM Quote GROUP BY author")

它以某种方式工作,但返回数据库中按作者列出的所有条目的计数,并且我所有优化搜索的尝试都失败了。
我想包括…where title=“远大前程”。。。但它不起作用。

qnakjoqk

qnakjoqk1#

您需要将聚合仅限于标题为“失落的世界”的书籍:

jdbcTemplate.queryForList("SELECT author, COUNT(*) AS count FROM Quote WHERE title = 'The Lost World' GROUP BY author")

实际上,由于 GROUP BY 问题。以下是原始查询:

SELECT author, COUNT(*) AS count
FROM Quote
WHERE title = 'The Lost World'
GROUP BY author;
hvvq6cgz

hvvq6cgz2#

这就是你要找的吗?从你的问题很难理解你的文本领域是什么?什么样的数据?你在数什么?我的理解是:

SELECT author, title, ROUND ((LENGTH(text) - LENGTH(REPLACE(text, 
                            title, "") )) / LENGTH(title))  AS count
FROM Quote

然后您可以添加此选项以仅选择所需的标题:

where title = 'The Lost World'

所以你得到这个:

SELECT author, title, ROUND ((LENGTH(text) - LENGTH(REPLACE(text, 
                            title, "") ) 
        ) / LENGTH(title)        
    )  AS count
FROM Quote
where title = 'The Lost World'

这是一个演示
第二次读你的问题时,我发现你可能需要这个:

SELECT author, title, COUNT(*) as count 
FROM Quote 
where title = 'The Lost World'
GROUP BY author, title

或者像这样:

jdbcTemplate.queryForList("SELECT author, title, COUNT(*) as count FROM Quote 
where title = 'The Lost World'
GROUP BY author, title")

相关问题