【发布时间】:2012-07-26 04:58:36
【问题描述】:
鉴于我有一个包含以下内容的表格,非常简单:
# select * from messages;
id | verbosity
----+-----------
1 | 20
2 | 20
3 | 20
4 | 30
5 | 100
(5 rows)
我想选择 N 条消息,它们的详细度总和低于 Y(出于测试目的,假设它应该是 70,那么正确的结果将是 id 为 1、2、3 的消息)。 对我来说非常重要的是,该解决方案应该独立于数据库(它应该至少在 Postgres 和 SQLite 上工作)。
我正在尝试类似的东西:
SELECT * FROM messages GROUP BY id HAVING SUM(verbosity) < 70;
但它似乎没有按预期工作,因为它实际上并没有对详细度列中的所有值求和。
我将非常感谢任何提示/帮助。
【问题讨论】:
-
想象一下,如果您有 10 行都带有
verbosity=20,那么数据库应该将哪三行报告为您的 SELECT 的结果?看起来这个查询在当前形式下是模糊的。也许您需要添加更多标准。比如你有1: 29, 2: 30, 3: 20, 4: 20, 5: 10,数据库应该给你1, 2吗?它应该给1, 3, 4吗?或者1, 2, 5? -
为什么你只期待 1,2,3 - 为什么不是 4?
标签: sql sqlite postgresql aggregate-functions sql-limit