[解決済み] SQL - HAVING vs. WHERE
2022-03-01 16:34:17
質問
以下の2つのテーブルがあります。
1. Lecturers (LectID, Fname, Lname, degree).
2. Lecturers_Specialization (LectID, Expertise).
最も専門性の高い講師を探したいのですが。 試してみたところ、うまくいきません。
SELECT
L.LectID,
Fname,
Lname
FROM Lecturers L,
Lecturers_Specialization S
WHERE L.LectID = S.LectID
AND COUNT(S.Expertise) >= ALL (SELECT
COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);
しかし、これを試すと、うまくいくのです。
SELECT
L.LectID,
Fname,
Lname
FROM Lecturers L,
Lecturers_Specialization S
WHERE L.LectID = S.LectID
GROUP BY L.LectID,
Fname,
Lname
HAVING COUNT(S.Expertise) >= ALL (SELECT
COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);
理由は何でしょうか?ありがとうございます。
解決方法を教えてください。
WHERE
節は
個々の行
;
HAVING
節は
アグリゲーション
つまり、カウント、平均、最小、最大、合計のような単一の結果を生成する選択結果は
複数
行になります。このクエリでは、2つ目の種類の条件(つまり、集約の条件)が要求されています。
HAVING
は正しく動作します。
原則として
WHERE
の前に
GROUP BY
と
HAVING
の後に
GROUP BY
. かなり原始的なルールですが、90%以上のケースで役に立ちます。
ANSIバージョンのjoinを使用してクエリを書き直したいと思うかもしれません。
SELECT L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID=S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)
これによって
WHERE
として使用されていた
シータ結合条件
.
関連
-
[解決済み】SQL ServerでIdentityカラムを更新する方法は?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】SQLのHAVINGとWHEREはどう違うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み】使用されるSELECT文は列の数が異なる(REDUX!)
-
[解決済み】一括読み込みデータ変換エラー(切り捨て)
-
[解決済み] ''付近の構文が正しくない
-
[解決済み] SQLクエリ「00904. 00000 - "%s: 無効な識別子".
-
[解決済み] 2つの列を分割するには?
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] マルチパート識別子をバインドできなかった
-
[解決済み] オペランド型の衝突:uniqueidentifierはintと互換性がない
-
[解決済み] MySQLのON句の不明なカラム