ホームページ >データベース >mysql チュートリアル >SQL カウントが個々の行ではなくすべての行を返すのはなぜですか?

SQL カウントが個々の行ではなくすべての行を返すのはなぜですか?

DDD
DDDオリジナル
2025-01-18 05:51:07279ブラウズ

Why Does My SQL Count Return All Rows Instead of Individual Rows?

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 行を AuraIDAuraStatus でグループ化し、グループごとに Aura を正確にカウントします。 この修正により、期待どおりの結果が得られます (下の行では 1、上の行では 2)。

以上がSQL カウントが個々の行ではなくすべての行を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。