ホームページ >データベース >mysql チュートリアル >SQL カウントが個々の行ではなくすべての行を返すのはなぜですか?
SQL COUNT のトラブルシューティング: 個々の行数の取得
SQL クエリには重要な GROUP BY
句が欠落しているため、誤った合計行数が生成される可能性があります。 この例では、一番上の行のカウントが 2 となっており、集計に問題があることを示しています。
提供された複雑なクエリの中核的な問題は、Aura
カウントを計算するサブクエリ内にあります:
<code class="language-sql">LEFT JOIN ( select `ID` as `AuraID`, `Status` as `AuraStatus`, count(*) as `Aura` from messages_aura ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
このサブクエリは、GROUP BY
句を指定しないと、messages_aura
または AuraID
に関係なく、AuraStatus
内のすべての行を合計します。 したがって、常にテーブルの合計行数 (この場合は 2) が返されます。
解決策は、GROUP BY
句を追加して正しくグループ化してカウントすることです。
<code class="language-sql">LEFT JOIN ( select `ID` as `AuraID`, `Status` as `AuraStatus`, count(*) as `Aura` from messages_aura GROUP BY `AuraID`, `AuraStatus` ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
この修正されたサブクエリは、messages_aura
行を AuraID
と AuraStatus
でグループ化し、グループごとに Aura
を正確にカウントします。 この修正により、期待どおりの結果が得られます (下の行では 1、上の行では 2)。
以上がSQL カウントが個々の行ではなくすべての行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。