我得到一个奇怪的错误,当我尝试在子查询得到SUM(...)柱,然后让行“指标”:如何将“行位置”添加到来自子查询的具有SUM(...)列的查询中?
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 COUNT(*) FROM lb b WHERE a.val <= b.val) AS position
选择; - 不使用SUM。
(但我确实需要两者)
这里是(工作)例(sqlfiddle),其中排索引丢失(这也包括一些测试数据):http://sqlfiddle.com/#!5/b1cc3/1/0
我怎样才能解决它,所以它会工作(也就是说,添加行号到结果集)?
我需要这些索引,因为我要在此查询后添加WHERE子句,并且我需要知道保留的行的顺序。
例如,对于在上面的拨弄的测试数据的有用的结果是:
| displayName | val | position |
|-------------|------|----------|
| name2 | 1256 | 1 |
| name4 | 133 | 2 |
| name5 | 62 | 3 |
| name3 | 43 | 4 |
(位置可能以及从0开始,这不是重要的)
P.S.用其他东西替换SQL实现(SQLite)不是一种选择(至少现在不是)
适用于我(3.8.12)。请注意,ORDER BY必须位于外部查询中。 –
@CL。我尝试将ORDER BY移动到外部查询,查询仍然中断,并出现相同的错误。让我检查版本... –
我的第一个评论中的两个句子是独立的。 –