62

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

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

私が期待していたのは、最大5 行のスコアの合計で、最大 5 の COUNT(*) でした (回答が 5 未満になる可能性があるため、コード ロジックでは常に 5 になるとは限りません) 。

代わりに、一致する行の総数 (ユーザーが 1 の場合) がカウントとして返され、それらの行のスコアの合計が返されるようです。入れても入れてもLIMIT 1数字は変わらない。LIMIT 5LIMIT 50

この状況でうまくいくと私が信じているのは、代わりにこれです

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

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

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

4

1 に答える 1

66

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

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

于 2013-06-10T09:43:32.523 に答える