web-dev-qa-db-ja.com

MySQL COUNT with LIMIT

私がしたいのは、列を合計するだけでなく、合計する行数をCOUNTすることです。制限は5行までです。だから私のクエリは:

SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5

私が期待していたのは、最大5つのCOUNT(*)(5つ未満の回答がある可能性があるため、コードロジックで常に5であると仮定することはできません)、および5行まで。

代わりに、一致する行の合計数(ユーザーは1)がカウントとして返され、それらの行のスコアの合計が返されます。 LIMIT 1LIMIT 5、またはLIMIT 50と入力しても、数字は変わりません。

この状況でうまくいくと思うのは、代わりにこれです

SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a

しかし、これはそのような単純なクエリでは少し複雑に思えます。トラフィックの多いスクリプトであるため、可能な限りパフォーマンスを高めたいと思います。

何か不足していますか?私は このバグレポート この「問題」に関連しているように見える数年前から見つけましたが、実際にはバグではないと思いますか?

41
Lee

これは実際にクエリが動作する方法であり、通常の動作です。 LIMITを使用すると、カウントまたは合計は制限されず、返される行のみが制限されます。したがって、クエリはn句で指定されているLIMIT行を返します。また、クエリは実際には1行のみを返すため、(ゼロ以外の)制限を適用しても結果には影響しません。

ただし、2番目のクエリは期待どおりに機能し、この問題を解決する確立された方法です。

44
Fabio