2015-12-21 49 views
0

我得到一個奇怪的錯誤,當我嘗試在子查詢得到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)不是一種選擇(至少現在不是)

+1

適用於我(3.8.12)。請注意,ORDER BY必須位於外部查詢中。 –

+0

@CL。我嘗試將ORDER BY移動到外部查詢,查詢仍然中斷,並出現相同的錯誤。讓我檢查版本... –

+0

我的第一個評論中的兩個句子是獨立的。 –

回答

0

感謝CL.的評論,很明顯查詢正在使用更新版本的SQLite。

所以這個問題很可能是sqlitebrowser(和sqlfiddle也是)使用過時的SQLite版本。 (我打開an issue in sqlitebrowser repository關於這個問題)