spring - Spring repo 中的“ID 不在结果集中”错误,但在 PGA 中有效
问题描述
我得到了一个非常基本的查询,它获得了前 10 个搜索词:
select distinct keyword, sum (amount) as keyword_amount from search group by keyword order by keyword_amount DESC
这在 PostGresAdmin 4 中运行良好,我获得了前 10 名。但是当我想通过端点上的 Postman 在 Spring 上对其进行测试时,它不断给我 500 个错误。它说没有找到 ID 和/或应该在 group by 或在聚合函数中使用。我在其他主题中发现我需要使用“distinct”或将 ID 放在 min/max(?) 中。仍然没有成功,更奇怪的是它确实在 PostGreSQL 本身中工作。
我试过了:
@Query( value = "select distinct keyword, sum (amount) as keyword_amount from search " +
"group by keyword order by keyword_amount DESC",
nativeQuery = true
)
List<Search> findTop10Keywords();
这给了我丢失的 ID 错误,我尝试不使用 nativeQuery,但后来我得到:
search is not mapped [select distinct keyword, sum (amount) as keyword_amount from search group by keyword order by keyword_amount DESC
我不确定为什么/在哪里必须映射搜索?
解决方案
SELECT keyword, sum(amount) AS keyword_amount
FROM "search" -- ?
GROUP BY keyword
ORDER BY keyword_amount DESC NULLS LAST
LIMIT 10;
既然你已经GROUP BY keyword
,添加distinct
是一个昂贵的无操作。去掉它。
sum(amount)
可能为 NULL。如果可能发生这种情况(取决于未公开的细节),请务必使用ORDER BY keyword_amount DESC NULLS LAST
. 看:
似乎可以安全地假设调用的查询indTop10Keywords
应该只返回前 10 个。所以LIMIT 10
。
“搜索”是标准 SQL 中的保留字(即使在 Postgres 中允许作为标识符)。也许这就是春天的错觉。双引号可能会有所帮助。但我宁愿避免使用保留字作为标识符。
推荐阅读
- html - CSS overflow-x:hidden 在移动设备上不起作用
- angular - 类型'可观察的
>' 不可分配给类型 'boolean | 网址树 | 可观察的 | 承诺 ' - php - 如何修复以下 404 错误。这是缓存问题吗?
- javafx - 是否有一种简单的方法可以检查是否在 TableView 中单击了列标题?
- javascript - 使用 JavaScript/jQuery 改变线性渐变百分比
- symfony - 模型示例在 api 平台中未正确显示
- ios - UIPresentationController委托如何设置
- mysql - 错误号:从数据库中选择时出现 1064
- python - 使用 Beautifulsoup 进行网页抓取并收集表格文本值
- php - 当我使用 jquery 将数据添加到表价格和未定义项目时