SQLite v2.8.17 での 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 の動作は複数の行を 1 つにマージすることであると書かれています。集計関数を使用しないと、エラーが発生するか、GROUP BY にも集計関数にも含まれていない行ごとにランダムな値が選択されます。
結果は私が理解しているものとは異なるようです。
ここで何が欠けているのか誰かが説明してくれますか?