
情報処理初心者です。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で質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- 英語 Recently, dental implants have been suggested havi 4 2022/06/10 08:55
- 英語 英語 文法問題 分子構文 3 2022/10/31 15:30
- 英語 having it close to whereの訳し方 3 2023/03/18 20:40
- 英語 提示文の動名詞"getting"の意味について 8 2022/10/24 11:47
- 英語 英語です。 His various problems ()from his having been 2 2022/05/10 12:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで年齢から年代ごとの集計
-
ACCESSのクエリで集計で、先頭...
-
複数列フィールド値のクロス集計
-
項目ごとに最大値の行を表示したい
-
FROM の中で CASE を使えるでし...
-
ファイルメーカーでピボットテ...
-
access 存在しない項目を”0件”...
-
ファイルメーカーでの集計
-
Accessフォームにクロス集計ク...
-
集計クエリでの抽出条件
-
access SQL構文について
-
accessでセルの個数を集計する...
-
Accessの更新クエリについて質...
-
アクセスクエリ 締め日毎で絞...
-
MS-Accessのクロス集計クエリと...
-
桐の集計(集計行設定のこと)...
-
ACCESSのレポートに売上の累計...
-
情報処理初心者です。SQLの GRO...
-
★アクセス2002★クロス集計で ...
-
クロス集計の結果を元に戻す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FROM の中で CASE を使えるでし...
-
ACCESSのクエリで集計で、先頭...
-
複数列フィールド値のクロス集計
-
access 存在しない項目を”0件”...
-
桐の集計(集計行設定のこと)...
-
Accessフォームにクロス集計ク...
-
クロス集計の結果を元に戻す方法
-
AccessからExcelへエクスポート...
-
VBA 得意先ごと且つ日付ごとに...
-
アクセスクエリ 締め日毎で絞...
-
MS-Accessのクロス集計クエリと...
-
アクセス レポートのテキスト...
-
「警告 : NULL 値は集計または...
-
Accessで別テーブルの個数をユ...
-
Accessで年齢から年代ごとの集計
-
SQLserver 型違いの日付の比較...
-
Access2007 年度ごとの四半期...
-
Accessのクエリをクロス集計ウ...
-
accessクロス集計で前月21日~...
-
アクセス2003のsum([金額])で...
おすすめ情報