2

テーブル内のすべての行に対して複数回表示される外部キーを検出し、サブクエリを介してそれらの外部キーを返そうとしています。

GROUP BY列を使用して、COUNT各外部キーを視覚化できました。

SELECT orders_id, COUNT(*) as count
FROM order_history
GROUP BY orders_id

しかし、次のように、フィルタリングしようとして WHERE 句でそれを拡張すると、次のようになります。

SELECT orders_id, COUNT(*) as count
FROM order_history
GROUP BY orders_id
WHERE count > 1

エラーが発生する

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE count > 1 LIMIT 0, 30' at line 4

評価さcountれた時点で明らかに比較の対象外ですか?WHERE

: 回答の更新を投稿:

迅速な対応に感謝します。HAVINGまさに私が見逃していたものです。この質問は、トピックの拡張に役立つことがわかりました: WHERE vs HAVING

4

2 に答える 2

3

のような集計値にフィルタリングを適用するには、ではなく句COUNT(),SUM(),MAX(),MIN()を使用します。HAVINGWHERE

SELECT orders_id, COUNT(*) as count
FROM order_history
GROUP BY orders_id
HAVING count > 1

構文エラーは、WHERE句が句の前になければならないという事実から生じますGROUP BY。ただし、適切な場所にある場合でも、句が計算さcountれた時点でエイリアスが不明であるため、エラーが発生します。WHERE

MySQLSELECT構文ドキュメントから:

HAVING 句は、SELECT リストまたは外部サブクエリの select_expr で指定された任意の列またはエイリアス、および集計関数を参照できます。

于 2012-12-28T20:58:55.810 に答える
1

where clauseと一緒に使用することはできませんgroup by clause。この場合は使用する必要がありますhaving

SELECT orders_id, COUNT(*) as count
FROM order_history
GROUP BY orders_id
having count > 1
于 2012-12-28T21:00:12.390 に答える