私がしたいのは、列を合計するだけでなく、合計する行数をCOUNTすることです。制限は5行までです。だから私のクエリは:
SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5
私が期待していたのは、最大5つのCOUNT(*)(5つ未満の回答がある可能性があるため、コードロジックで常に5であると仮定することはできません)、および5行まで。
代わりに、一致する行の合計数(ユーザーは1)がカウントとして返され、それらの行のスコアの合計が返されます。 LIMIT 1
、LIMIT 5
、またはLIMIT 50
と入力しても、数字は変わりません。
この状況でうまくいくと思うのは、代わりにこれです
SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a
しかし、これはそのような単純なクエリでは少し複雑に思えます。トラフィックの多いスクリプトであるため、可能な限りパフォーマンスを高めたいと思います。
何か不足していますか?私は このバグレポート この「問題」に関連しているように見える数年前から見つけましたが、実際にはバグではないと思いますか?
これは実際にクエリが動作する方法であり、通常の動作です。 LIMIT
を使用すると、カウントまたは合計は制限されず、返される行のみが制限されます。したがって、クエリはn
句で指定されているLIMIT
行を返します。また、クエリは実際には1行のみを返すため、(ゼロ以外の)制限を適用しても結果には影響しません。
ただし、2番目のクエリは期待どおりに機能し、この問題を解決する確立された方法です。