如何将 "row position" 添加到带有子查询中 SUM(…) 列的查询中?
How can I add "row position" to a query with a SUM(…) column from subquery?
当我尝试在子查询中获取 SUM(...) 列然后获取行 "indexes":
时出现奇怪的错误
WITH lb(displayName, val) AS (
SELECT user.displayName, SUM(stats.weight) AS val FROM stats
LEFT OUTER JOIN user ON user.id = stats.userId
GROUP BY user.id
ORDER BY val DESC
)
SELECT displayName, val, (SELECT COUNT(*) FROM lb b WHERE a.val <= b.val) AS position FROM lb a
当我在 SQLiteBrowser 中 运行 时得到的错误是:
misuse of aggregate: SUM():
后跟查询的全文。
但是,如果我执行以下任一操作,查询将正常工作:
- 从最后的 SELECT 中删除
, (SELECT COUNT(*) FROM lb b WHERE a.val <= b.val) AS position
;
- 不要使用 SUM。
(但我确实需要两者)
这是(工作)示例(sqlfiddle),其中缺少行索引(它还包括一些测试数据): http://sqlfiddle.com/#!5/b1cc3/1/0
我怎样才能修复它,使其正常工作(也就是说,将行号添加到结果集中)?
我需要这些索引,因为我要在这个查询之后添加一个 WHERE 子句,我需要知道保留的行的顺序。
比如上面fiddle中的测试数据想要的结果是:
| displayName | val | position |
|-------------|------|----------|
| name2 | 1256 | 1 |
| name4 | 133 | 2 |
| name5 | 62 | 3 |
| name3 | 43 | 4 |
(位置也可以从0开始,不重要)
P.S。用其他东西替换 SQL 实现(SQLite)不是一个选项(至少现在不是)
感谢 CL. 的评论,很明显该查询正在更新版本的 SQLite 上运行。
所以问题很可能是sqlitebrowser(还有sqlfiddle)使用了过时版本的SQLite。 (关于这个问题我打开了an issue in sqlitebrowser repository)
当我尝试在子查询中获取 SUM(...) 列然后获取行 "indexes":
时出现奇怪的错误WITH lb(displayName, val) AS (
SELECT user.displayName, SUM(stats.weight) AS val FROM stats
LEFT OUTER JOIN user ON user.id = stats.userId
GROUP BY user.id
ORDER BY val DESC
)
SELECT displayName, val, (SELECT COUNT(*) FROM lb b WHERE a.val <= b.val) AS position FROM lb a
当我在 SQLiteBrowser 中 运行 时得到的错误是:
misuse of aggregate: SUM():
后跟查询的全文。
但是,如果我执行以下任一操作,查询将正常工作:
- 从最后的 SELECT 中删除
, (SELECT COUNT(*) FROM lb b WHERE a.val <= b.val) AS position
; - 不要使用 SUM。
(但我确实需要两者)
这是(工作)示例(sqlfiddle),其中缺少行索引(它还包括一些测试数据): http://sqlfiddle.com/#!5/b1cc3/1/0
我怎样才能修复它,使其正常工作(也就是说,将行号添加到结果集中)?
我需要这些索引,因为我要在这个查询之后添加一个 WHERE 子句,我需要知道保留的行的顺序。
比如上面fiddle中的测试数据想要的结果是:
| displayName | val | position |
|-------------|------|----------|
| name2 | 1256 | 1 |
| name4 | 133 | 2 |
| name5 | 62 | 3 |
| name3 | 43 | 4 |
(位置也可以从0开始,不重要)
P.S。用其他东西替换 SQL 实现(SQLite)不是一个选项(至少现在不是)
感谢 CL. 的评论,很明显该查询正在更新版本的 SQLite 上运行。
所以问题很可能是sqlitebrowser(还有sqlfiddle)使用了过时版本的SQLite。 (关于这个问题我打开了an issue in sqlitebrowser repository)