2017-03-17 57 views
4

我想了解GROUP BY對SQLite的v2.8.17SQLite的:GROUP BY無骨料

這裏一個奇怪的行爲是代碼:

<?php 
$selectMaxQuery = $this->_db->prepare('SELECT COUNT(*) AS c FROM (SELECT MAX(groupCode) FROM docs GROUP BY groupCode)'); 
$selectQuery = $this->_db->prepare(' SELECT COUNT(*) AS c FROM (SELECT  groupCode FROM docs GROUP BY groupCode)'); 
$selectMaxQuery->exec(); 
$selectQuery->exec(); 
var_dump($selectMaxQuery->fetch()->c, $selectQuery->fetch()->c); 

下面是結果:

string(3) "614" 
string(3) "797" 

無處不在我在互聯網上,它說,GROUP BY行爲是將幾行合併爲一個。在不使用聚合函數的情況下,它應該給我一個錯誤,或者爲GROUP BY或聚合函數中的每一行都選擇一個隨機值。

結果似乎與我所瞭解的不同。

有人可以解釋我什麼,我在這裏失蹤?

+0

但是你有GROUP BY中的列,所以沒有問題,不會選擇一個隨機值。也適當的數據庫引擎不會給隨機行,默認情況下MySQL。 –

+0

這就是我說的,對吧? '對於每一行,也不在GROUP BY中,也不在聚合中。這裏是在GROUP BY中,所以我不明白爲什麼結果不同,使用或不使用分組字段的聚合函數? – zenko

+1

這兩個子選擇返回的行數應該相同,因爲您在同一個字段上進行分組。所以count(*)也應該是相同的,除非在運行查詢時添加了行。你的結果對我毫無意義。 – Anand

回答

2

這是一個錯誤。

十年前就修正了這個問題; SQLite 2.8.17於2005年發佈。 您應該重新考慮您選擇的軟件。

+0

我希望我能! :/ Thx的提示,我會使用一個聚合函數。 – zenko