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