我得到一個奇怪的錯誤,當我嘗試在子查詢得到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移動到外部查詢,查詢仍然中斷,並出現相同的錯誤。讓我檢查版本... –
我的第一個評論中的兩個句子是獨立的。 –