
情報処理初心者です。SQLの
GROUP BY の時の HAVINGの使い方が
イマイチよくわかりません。
問題によっては HAVINGの後にCOUNTなどが
あったり、なかったりします。この違いが
全くわかりません。
例えばこんな問題です。
履修者数が25名以上の科目名を抽出する場合SSELECT 科目名 COUNT (*) AS 履修者数
FROM 選択科目表A, 履修表B
WHERE A.科目コード= B.科目コード
GROUP BY 科目名
HAVING COUNT(*)>=25
となります。
しかし、別の問題は
男子の通学時間が一番長い時間を求める
SSELECT 性別 MAX (通学時間) AS 最高通学時間
FROM 生徒表
GROUP BY 性別
HAVING 性別=′男′
というようにHAVINGの後に何も
きていません。HAVING MAXではダメ
なんでしょうか…? そもそもHAVING MAX
なんて存在するのでしょうか?笑
なにもかもが、全くわかりません。
HAVINGの後にどんな関数
ならあってもいいのでしょうか?
HAVINGの後に関数がある時と
無い時との違いは…?
この二つを初心者の馬鹿な私でもわかりやすく
教えて頂けたら嬉しいです!
宜しくお願いします!
長文失礼しました!
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> HAVINGの後にどんな関数
> ならあってもいいのでしょうか?
・ グループ化によって結果が決まる関数です。
> HAVINGの後に関数がある時と
> 無い時との違いは…
・判定に集計関数の結果を使いたいかどうかです。
WHERE も HAVING も、「条件に一致するものだけ抽出」という機能です。
違いは
・WHERE は グループ化の前に判定する。
・HAVINGはグループ化の後に判定する。
です。
雑に言うとこんな感じ
・JOINで結合されたテーブルを作る
・Where で合致する行を抽出
・GROUP BYでまとめる。COUNT等の集計関数の計算をする
・HAVINGで合致する行を抽出
「グループ化の後に判定する」ので、 HAVING では COUNT等の集計関数の結果を使って判定できる、という特徴があります。
HAVING COUNT(*)>=25
というのは、「グループ化して集計計算されたCOUNT(*) の値」が25以上、ということです。
ここで気をつけなければいけないのが
「集計関数の結果を使うことができる」
であって
「集計関数の結果を**使*わ*な*け*れ*ば*な*ら*な*い**」
ではない、という点です。
SELECT
性別,
MAX (通学時間) AS 最高通学時間
FROM 生徒表
GROUP BY 性別
HAVING 性別=′男′
の場合、グループ化後にも「性別」という列が有ります。
その、「グループ化後の『性別』列」の値が'男'である、というのが この HAVING の意味です。
※ この例では WHEREでも同様のことができます。
> HAVING MAXではダメなんでしょうか…?
例えば
・MAX (通学時間)が 1時間以上
とかいう条件なら、HAVINGで MAX関数を使って判定します。
ですが、これは、元のSQLとは目的が違います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FROM の中で CASE を使えるでし...
-
ACCESSのクエリで集計で、先頭...
-
桐の集計(集計行設定のこと)...
-
Accessフォームにクロス集計ク...
-
複数列フィールド値のクロス集計
-
access 存在しない項目を”0件”...
-
クロス集計の結果を元に戻す方法
-
accessクロス集計で前月21日~...
-
VBA 得意先ごと且つ日付ごとに...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
異なるサーバのDBデータ同士を...
-
INSERT INTO ステートメントに...
-
ORACLEでLONG項目からCHAR項目...
-
Access テキスト型に対する指定...
-
固有レコード識別子の選択とは??
-
SUBSTRING 関数に渡した長さの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FROM の中で CASE を使えるでし...
-
ACCESSのクエリで集計で、先頭...
-
桐の集計(集計行設定のこと)...
-
複数列フィールド値のクロス集計
-
Accessフォームにクロス集計ク...
-
アクセス レポートのテキスト...
-
「警告 : NULL 値は集計または...
-
アクセスクエリ 締め日毎で絞...
-
access 存在しない項目を”0件”...
-
AccessからExcelへエクスポート...
-
VBA 得意先ごと且つ日付ごとに...
-
Accessでの集計用クエリの作成
-
クロス集計クエリについて
-
クエリで最新データを表示したい!
-
ファイルメーカーからエクセル...
-
項目ごとに最大値の行を表示したい
-
クロス集計の結果を元に戻す方法
-
MS-Accessのクロス集計クエリと...
-
絶対値ごとに集計したい
-
ファイルメーカーに詳しい方教...
おすすめ情報