1. ホーム
  2. Mysql

群関数解の無効な使用

2022-02-08 18:27:01

グループ関数の無効な使用は、セット関数の無効な使用を意味します。

間違った文の例 SELECT sname AS '優秀学生名',AVG(score) AS '平均評点平均' FROM `grade_info` WHERE AVG(score)>90 GROUP BY sno;

正しい書き方 SELECT sname AS '優秀学生名',AVG(score) AS '平均評点平均' FROM `grade_info` GROUP BY sno HAVG(score) > 90 ;


説明

GROUP BYは、その名の通り、...でグループ化することです。SQLでよく使われる、フィールドをグループ化し(指定したフィールドが同じであればグループとなる)、そのグループに対して関連する操作を行うためのグループ化

<ブロッククオート

WHEREとHAVINGの違いは、以下の通りです。

<ブロッククオート <ブロッククオート

<スパン where節の機能は クエリ結果をグループ化する前に を使用して、Where 条件にマッチしない行を削除する、つまり、グループ化する前にデータをフィルタリングします。 where 条件にクラスタリング関数を含めることはできません。 特定の行をフィルタリングするためにWhere条件を使用します。

<ブロッククオート <ブロッククオート

having節の機能は、条件を満たすグループをフィルタリングすることである。 グループ化した後のデータをフィルタリングする。多くの場合、条件にクラスタリング関数を使用する。 に対するhaving conditionの使用。 特定のグループをフィルタリングするために また、グループ化には複数のグループ化基準を使用することができます。

<ブロッククオート

サンプルのエラー句の問題は、WHERE句でset関数が使われていることです。

<ブロッククオート

もう一つ、注意すべきは SQL の構文があります。

SELECT [DISTINCT|DISINCTROW|ALL] select_expression,... -- クエリーの結果
[FROM table_references -- クエリの対象となるテーブルを指定します。
[WHERE where_definition] -- where節、クエリデータのフィルタです。
[GROUP BY col_name,...] -- クエリ結果(where句にマッチするもの)をグループ化する。
[HAVING where_definition] -- グループ化された結果に対して条件分岐を行う。
[ORDER BY{unsigned_integer|col_name|formula}」となります。[asc|desc],...]である。-- クエリ結果をソートする
[LIMIT [オフセット,] 行数]。-- クエリの表示行数を制限する
[PROCEDURE procedure_name] -- クエリプロシージャから返される結果セットデータ
]

<スパン

クエリ文は、上記の順序で記述する必要があります。