収録問題 80問 / 10問ランダム出題
ランダムに出題・即時フィードバック・間違えた問題の復習機能付き
関係データベースで、1件のデータ(実体)を表す横方向のまとまりはどれですか?
答え: 行(レコード/タプル)
関係データベースの表は行(レコード)と列(属性)で構成され、1行が1件のデータを表します。
関係データベースで、各行を一意に識別するために定める列(の組)はどれですか?
答え: 主キー
主キーは一意性とNULL不可(実体保全性)を満たし、各行を一意に識別します。
他の表の主キーを参照し、表間の関連と整合性を保つために用いる列はどれですか?
答え: 外部キー
外部キーは他表の主キーを参照し、参照整合性(存在しない値を参照しない)を保ちます。
繰り返し項目(複数値)を排除し、各セルが単一の値を持つようにした正規形はどれですか?
答え: 第1正規形
第1正規形は繰り返し項目をなくし、各属性が単一値を持つ状態にします。正規化の出発点です。
第2正規形にするために除去するのは、どのような関数従属ですか?
答え: 主キーの一部にのみ依存する部分関数従属
第2正規形は第1正規形を満たした上で、複合主キーの一部にのみ依存する部分関数従属を除去します。
第3正規形にするために除去するのは、どのような関数従属ですか?
答え: 非キー属性が別の非キー属性に依存する推移的関数従属
第3正規形は第2正規形を満たした上で、非キー属性間の推移的関数従属を除去します。
SQLで、表から条件に合致する行を取り出すために使う基本的な文はどれですか?
答え: SELECT 〜 WHERE
SELECT文で列を指定し、WHERE句で条件を指定して行を抽出します。CREATEは定義、GRANTは権限付与です。
複数の表を共通の列で関連付けて1つの結果にまとめるSQLの操作はどれですか?
答え: 結合(JOIN)
JOINは複数表を共通列で関連付けて結合します。内部結合は両表で一致する行のみを返します。
SQLで、特定の列の値ごとにグループ化して合計や件数を集計する句はどれですか?
答え: GROUP BY
GROUP BYは指定列ごとに行をまとめ、SUMやCOUNTなどの集約関数と組み合わせて集計します。
インデックスを作成する主な目的はどれですか?
答え: 検索(参照)を高速化する
インデックスは検索を高速化しますが、更新時にはインデックス保守のコストが増え、容量も増えます。
トランザクションのACID特性のうち「原子性」を保証する操作の組合せはどれですか?
答え: コミットとロールバック
原子性は全実行か全取消を保証します。正常時はコミットで確定、異常時はロールバックで取り消します。
トランザクションのACID特性のうち「独立性(分離性)」の説明として適切なものはどれですか?
答え: 並行実行されるトランザクションが互いに影響しないこと
独立性は同時実行されるトランザクションが互いに干渉しないことを保証します。
複数トランザクションが互いに相手のロック解放を待ち続け、処理が進まなくなる状態はどれですか?
答え: デッドロック
デッドロックは互いのロック解放を待ち合い処理が停止する状態で、検知して一方を強制終了するなどで解消します。
複数の利用者が同じデータを同時に更新しても矛盾が起きないよう制御する仕組みはどれですか?
答え: 排他制御(ロック)
排他制御はロックなどで同時更新を調整し、データの一貫性を保ちます。共有ロックと専有ロックがあります。
実表に基づいて定義され、利用者には表のように見える仮想的な表はどれですか?
答え: ビュー
ビューは問合せ結果を仮想表として提供し、複雑な参照の簡略化やアクセス範囲の限定に使えます。
特定の表の更新などをきっかけに、自動的に実行される処理はどれですか?
答え: トリガー
トリガーはINSERTやUPDATEなどのイベントを契機に自動実行され、整合性維持やログ記録に使われます。
データベース設計で、実体(エンティティ)とその関連を図で表現する手法はどれですか?
答え: E-R図(実体関連図)
E-R図は実体・属性・関連を図示し、概念データモデルの設計に用いられます。
障害発生時に、ログを用いてコミット済みの更新を再現し、データを復旧する処理はどれですか?
答え: ロールフォワード(前進復帰)
ロールフォワードはバックアップにログのコミット済み更新を反映して復旧します。未完了処理の取消はロールバックです。
分散データベースで、複数サイトの更新を「全コミットか全ロールバック」に統一する手順はどれですか?
答え: 2相コミット(2フェーズコミット)
2相コミットは準備フェーズで合意を取り、コミットフェーズで全サイトを一斉に確定/取消し、分散環境の原子性を保ちます。
大量データの集計・分析を目的に、複数システムのデータを統合して蓄積する仕組みはどれですか?
答え: データウェアハウス
データウェアハウスは分析目的でデータを統合・蓄積し、意思決定支援に用いられます。
関係データベースとは異なり、固定スキーマに縛られず大規模分散に向くデータベースの総称はどれですか?
答え: NoSQL
NoSQLはキーバリューや文書型など柔軟なデータモデルを持ち、大規模・分散・非定型データに向きます。
候補キーの説明として適切なものはどれですか?
答え: 各行を一意に識別できる、主キーになり得る列(の組)
候補キーは一意性を満たし主キーになり得る列(の組)です。選ばれなかった候補キーは代替キーと呼ばれます。
SQLで列にNULLが入っているかを判定するために用いる条件はどれですか?
答え: IS NULL
NULLは未知・不在を表す特別な状態で、比較演算子では判定できません。IS NULL/IS NOT NULLを使います。
正規化を進めることの主な利点はどれですか?
答え: データの重複を減らし、更新時の矛盾を防ぐ
正規化は重複を排除して更新時異常を防ぎます。一方で結合が増え検索性能のために非正規化することもあります。
実体(エンティティ)間の「1対多」の関連の例として適切なものはどれですか?
答え: 1人の顧客が複数の注文を持つ
「1人の顧客が複数の注文を持つ」は1対多の典型です。多対多は中間表で1対多2つに分解して表現します。
可用性向上や負荷分散のため、データベースの複製を別サーバに保持・同期する仕組みはどれですか?
答え: レプリケーション
レプリケーションはデータベースの複製を同期し、参照負荷の分散や障害時の可用性向上に役立ちます。
DBに保存した一連の処理をまとめて呼び出せるようにした、あらかじめ定義された手続きはどれですか?
答え: ストアドプロシージャ
ストアドプロシージャは処理をDB内に定義して呼び出せるようにし、通信回数の削減や処理の共通化に役立ちます。
SQLで取り出した結果を、指定した列の値で昇順や降順に並べ替える句はどれですか?
答え: ORDER BY
ORDER BYは結果を指定列で並べ替えます。GROUP BYは集計のグループ化、HAVINGは集計後の絞り込みです。
大規模な注文テーブルで、注文日と顧客IDを条件にした検索が頻繁に遅い。最初に検討すべき対策として適切なものはどれですか?
答え: 検索条件に合う複合インデックスを設計し、実行計画で効果を確認する
検索性能は、条件、結合、並び順に合うインデックスと実行計画の確認が重要です。インデックスは読み取りを速くできますが、更新コストも増えるため設計が必要です。
トランザクション分離レベルで、他トランザクションがまだコミットしていない更新を読めてしまう現象はどれですか?
答え: ダーティリード
ダーティリードは未コミットデータを読んでしまう現象です。後でロールバックされる値を基に処理すると、整合性が崩れる可能性があります。
同じ集計条件で再実行したとき、他トランザクションの行追加により結果行数が変わる現象はどれですか?
答え: ファントムリード
ファントムリードは、同じ検索条件でも他トランザクションの挿入・削除により該当行集合が変わる現象です。分離レベルの設計で考慮します。
二つのトランザクションが互いに相手のロック解放を待ち続け、処理が進まない状態はどれですか?
答え: デッドロック
デッドロックは、複数の処理が互いに必要な資源を保持し合い、待ち状態から抜けられない状態です。DBMSは検出して一方を中断することがあります。
表を年月や範囲で分割し、検索や保守の対象を絞り込みやすくする設計はどれですか?
答え: パーティショニング
パーティショニングは大きな表を範囲、リスト、ハッシュなどで物理的・論理的に分割する設計です。検索範囲の限定や古いデータの保守に役立ちます。
本番DBのバックアップ設計で、RPOを小さくしたい。最も関係が深い設計はどれですか?
答え: バックアップ頻度やトランザクションログ取得間隔を短くする
RPOはどの時点までデータを戻せる必要があるかを示します。小さくするには、ログ取得や差分・増分バックアップの間隔を短くする設計が重要です。
個人情報を含む列を、権限のない利用者には一部伏字で見せたい。適切な対策はどれですか?
答え: 列マスキングやビューで表示内容を制御する
機微データは、必要最小限の権限、ビュー、列マスキング、監査ログなどを組み合わせて保護します。用途に応じて暗号化も検討します。
データウェアハウス向けに、事実表とディメンション表で分析しやすくする代表的なモデリングはどれですか?
答え: スタースキーマ
スタースキーマは、売上などの事実表を中心に、日付、商品、顧客などのディメンション表を配置する分析向けの設計です。
OLTPシステムの特徴として最も適切なものはどれですか?
答え: 多数の短い取引を高い整合性で処理する
OLTPは受注、決済、在庫更新など、多数の短いトランザクションを高い整合性と応答性で処理する用途に向きます。
SQLインジェクション対策として、アプリケーションがDBへ問い合わせる際に最も基本的な実装はどれですか?
答え: プレースホルダを使ったプリペアドステートメントで値をバインドする
SQLインジェクション対策では、SQL構文と値を分離するプリペアドステートメントが基本です。入力検証や最小権限も併せて実施します。
外部キー制約を設定する主な目的として最も適切なものはどれですか?
答え: 存在しない親行を参照する子行を防ぎ、参照整合性を保つ
外部キー制約は、子表の値が親表の主キーなどに存在することを保証し、孤児レコードの発生を防ぎます。
運用中のDBでスロークエリを改善する際、最初に行うべき調査として適切なものはどれですか?
答え: 実行計画、統計情報、読み取り行数、待機イベントを確認する
スロークエリ改善では、実行計画と実測値を確認し、インデックス不足、統計情報の古さ、結合順序、I/O待ちなどを切り分けます。
契約には個人契約と法人契約があり、どちらか一方にだけ属する。さらに法人契約だけが請求担当者を持つ。この構造を概念データモデルで表す方法として最も適切なものはどれですか?
答え: 契約をスーパータイプ、個人契約・法人契約を排他的サブタイプとして表す
共通属性をスーパータイプに置き、種別固有属性をサブタイプへ分けます。排他的制約により、一つの契約が両方へ同時に属さない業務規則も表せます。
商品の販売価格について、過去の注文は注文時点の価格で再現し、将来の価格改定も事前登録したい。適切な設計はどれですか?
答え: 価格履歴に適用開始日と適用終了日を持たせ、期間が重複しないよう制約する
有効期間を持つ履歴モデルなら、任意時点の価格と将来予定を表せます。同一商品の期間重複や空白をどう扱うかも制約・更新手順で定義します。
複数画面から同じ顧客情報を更新した際、後から保存した処理が先の変更を気付かず上書きした。利用者へ競合を通知したい場合の対策はどれですか?
答え: バージョン番号を更新条件に含める楽観的ロック
読み込み時のバージョン番号をUPDATEの条件に含め、更新件数が0なら他処理による変更を検知します。利用者に再読込や差分確認を促せます。
時刻印順序方式で、トランザクションT1より新しいT2が既にデータを更新した後、古いT1が同じデータを書き込もうとした。基本的な扱いはどれですか?
答え: 時刻印順序に反するT1の書込みを拒否し、必要なら再実行する
時刻印順序方式は論理的な実行順を時刻印で保ちます。古いトランザクションの書込みが新しい更新を壊す場合は中止し、整合した順序で再実行します。
MVCCを使うDBで、長時間開いたままの読取りトランザクションがあり、不要な旧バージョンを回収できず表が膨張している。最も適切な対応はどれですか?
答え: 長時間トランザクションを特定・短縮し、回収処理の進捗を監視する
MVCCでは古いスナップショットが必要な間、旧行バージョンを削除できません。長時間トランザクションの原因を直し、VACUUMなど製品固有の回収処理を正常化します。
注文表で WHERE customer_id = ? AND ordered_at >= ? ORDER BY ordered_at を頻繁に実行する。最初に検討する複合インデックスはどれですか?
答え: (customer_id, ordered_at)
一般に等価条件のcustomer_idを先頭、範囲・並び順のordered_atを後ろに置くと、対象顧客の期間検索と並べ替えに利用しやすくなります。実データと実行計画で確認します。
実行計画では100行と見積もられた結合が実際には100万行となり、非効率な結合方式が選ばれた。最初に確認すべきものはどれですか?
答え: 統計情報の鮮度、列値の偏り、列間相関と実測行数
オプティマイザは統計情報から行数を推定します。統計が古い、値が偏る、複数列が相関する場合は誤差が大きくなり、結合順序や方式の選択を誤ることがあります。
更新の多い表を、複合キー (created_at, id) の順で重複・欠落なくページ送りしたい。OFFSET方式より適切な条件はどれですか?
答え: 前ページ末尾の (created_at, id) より後を同じ順序で取得する
キーセットページングでは一意な並び順と前回末尾キーを使います。同時更新の影響と深いOFFSETの読み飛ばしコストを抑えやすくなります。
1億件を更新する夜間バッチが途中失敗すると、最初からやり直すため時間内に終わらない。改善として最も適切なものはどれですか?
答え: 再実行可能な処理単位でコミットし、チェックポイントから再開できるようにする
業務整合性を保てる単位で区切り、処理済み位置を永続化します。再実行時の二重更新を防ぐ冪等性と、部分コミット時の業務要件も設計します。
無停止に近い形で必須列を追加したいが、旧版アプリも同時稼働する。安全な変更手順として最も適切なものはどれですか?
答え: NULL許可で追加し、両対応コードを展開、既存値を補完後に制約を強める
Expand and contract方式では、まず旧新両版が扱える形でスキーマを拡張し、データ移行とコード切替後に不要な互換部分を縮退させます。
数TBの本番DBを別製品へ移行し、停止時間を数分に抑えたい。最も適切な方式はどれですか?
答え: 初期全量コピー後、CDCで更新差分を継続反映し、整合性確認後に切り替える
全量ロード中の更新を変更データキャプチャで追随し、遅延が十分小さくなった時点で短時間停止して最終同期します。件数・ハッシュ・業務照合も必要です。
2相コミット中、参加DBがprepare済みの状態で調停者へ接続できなくなった。参加DBが独自判断でコミットしてはいけない主な理由はどれですか?
答え: 他参加者の結果と不一致になり、分散トランザクションの原子性を壊すため
prepare済み参加者は最終決定を調停者のログなどから確認する必要があります。独自決定すると、一部コミット・一部ロールバックの不整合が起こり得ます。
書込み直後に読取りレプリカへ問い合わせると、更新前の値が返ることがある。利用者自身の更新を直後に必ず見せる方法はどれですか?
答え: 更新後の一定期間または位置確認まで、主系から読み取る
非同期レプリカには遅延があります。read-your-writesが必要な処理は主系へ固定するか、レプリカが対象ログ位置まで追随したことを確認してから読みます。
ネットワーク分断時に主系候補が二つ同時に書込みを受け付け、復旧後にデータが競合した。再発防止の中核はどれですか?
答え: クォーラムとフェンシングで、書込み可能な主系を一つに限定する
スプリットブレイン対策では、多数決などで正当な主系を一つ選び、旧主系をストレージやネットワークから遮断するフェンシングが重要です。
操作ミスで午前10時15分に重要データを削除した。午前10時14分の状態へ戻し、他DBと比較して確認したい。最も適切な方法はどれですか?
答え: バックアップとトランザクションログから隔離環境へ時点復旧する
PITRで削除直前まで再生し、まず隔離環境で対象行と依存データを検証します。必要なデータだけを安全に戻すか、全体切替かを影響に応じて決めます。
DB暗号化鍵をローテーションする。DBバックアップと同じ保管領域へ鍵を平文保存することが危険な理由はどれですか?
答え: 保管領域が侵害されると、暗号化データと復号鍵を同時に取得されるため
鍵はKMSやHSMなど分離した管理基盤で保護し、アクセス権、監査、ローテーション、旧バックアップ復号に必要な鍵の保存期間を設計します。
マルチテナントDBで、アプリの検索条件漏れがあっても別テナントの行を返さないようDB側でも防ぎたい。適切な対策はどれですか?
答え: 認証主体に基づく行レベルセキュリティを設定し、管理権限も分離する
行レベルセキュリティならDBMSが各問合せへテナント境界を強制できます。接続IDの信頼性、バイパス権限、管理操作の監査も合わせて設計します。
顧客から個人データ削除依頼を受けた。DB本体から削除してもバックアップには一定期間残る。適切な運用はどれですか?
答え: 保持期限と復元時の再削除手順を定め、バックアップを厳格に隔離・期限消去する
バックアップの改変が困難な場合は、目的に沿った保持期限、アクセス制限、期限後消去を定めます。復元時には削除台帳を再適用し、削除済みデータを本番へ復活させません。
複雑な集計を高速化するためマテリアライズドビューを使うが、利用者へ最大5分前までのデータを提供する必要がある。設計で最も重要なものはどれですか?
答え: 更新方式・間隔・失敗監視を定め、鮮度を測る
マテリアライズドビューは結果を保持するため、完全・差分更新の選択、更新時間、失敗時の再試行、最終成功時刻の監視が鮮度SLAに直結します。
ハッシュ結合がメモリに収まらず一時領域へ大量に書き出され、夜間集計が遅い。改善前に最も適切な調査はどれですか?
答え: 実行計画の実測行数、推定誤差、メモリ上限、一時I/O、結合前の絞込みを確認する
スピルは行数誤推定、絞込み不足、メモリ不足など複数要因で起きます。実測を基に統計、SQL、索引、処理単位、メモリ設定のどこを直すか判断します。
標準的なSQLのNULL比較で、値が1、2、3の行にWHERE id NOT IN (2, NULL)を適用します。返るidはどれですか?
答え: どの行も返らない
2は条件が偽となり、1と3はNULLとの比較を含むため真になりません。WHEREは真の行だけを残します。除外先にNULLが入り得る場合は、その意味を決めたうえでNOT EXISTSなどを検討します。
全顧客と、その顧客の支払済み注文だけをLEFT JOINで表示します。支払済み注文がない顧客も残すには、注文のstatus='paid'という条件をどこに置きますか?
答え: 顧客IDの一致とともにON句へ置く
ON句で結合対象の注文を絞れば、一致する注文がない顧客も右側がNULLの行として残ります。右側のstatus条件をWHEREだけに置くと、そのNULL行まで除外されます。
顧客を注文へLEFT JOINし、顧客IDごとに注文数を求めます。orders.idはNULLを許さない主キーです。注文がない顧客の件数を0にする集計はどれですか?
答え: COUNT(orders.id)で数える
外部結合は注文がなくても顧客側の行を残します。COUNT(*)やCOUNT(1)はその行を数えますが、COUNT(orders.id)はNULLを数えないため0になります。
注文1件に明細2行と入金3行があります。明細と入金をそれぞれ注文IDだけで結合して金額をSUMすると過大になりました。両方の合計を求める修正はどれですか?
答え: 各子表を注文単位で集計してから結合する
2行と3行の結合で6行ができ、各金額が繰り返されます。明細と入金をそれぞれ注文単位にまとめてから結合すれば、独立した合計を保てます。同額の別明細もあるため、金額のDISTINCTは代替になりません。
2025年売上と2026年売上から、同じ列構成の明細をまとめます。別取引でも表示列が同じになることがあり、重複を含め全明細を残したい場合、どれを使いますか?
答え: UNION ALLを使って結合する
UNION ALLは両方の結果を重複除去せず合わせます。UNIONは選択した列の値が同じ行を1行にまとめるため、別取引が欠落したような集計になります。表示順が必要なら最後にORDER BYを指定します。
2026年の注文だけを対象に、売上合計が100万円以上の顧客を抽出します。集計前の注文日条件と集計後の合計条件の使い分けはどれですか?
答え: 注文日をWHERE、SUM(amount)をHAVINGに置く
WHEREで対象年の注文へ絞ってから顧客別に集計し、HAVINGでグループの合計を判定します。対象期間を絞らなければ過去年などの注文も合計に混ざります。
注文が1件以上ある顧客を、顧客表の1行につき1回だけ返します。注文数に応じて顧客行が増えない書き方はどれですか?
答え: 顧客IDで相関したEXISTSを条件にする
EXISTSは一致する注文が存在するかを判定します。顧客表の行自体を注文数だけ複製しないため、この要件を直接表せます。速度の優劣は索引や実行計画にも依存します。
PostgreSQLの表にCHECK (quantity > 0)だけを設定しました。quantityのNULLも禁止したい場合、追加すべき制約はどれですか?
答え: quantityへNOT NULLを追加する
PostgreSQLのCHECKは式が偽になる行を拒否しますが、NULLによる不明は通過します。正の値かつ必須という条件には、CHECKとNOT NULLを組み合わせます。
会員番号はNULL不可です。アプリで未登録をSELECT確認してからINSERTしていますが、同時実行で同じ番号が2件登録されました。重複防止の中核はどれですか?
答え: 番号にUNIQUE制約を設け、競合を処理する
確認と登録の間に別トランザクションが入れるため、事前確認だけでは重複を防げません。DBの一意制約で整合性を守り、アプリで競合時の応答を扱います。既存重複がある場合は先に解消します。
顧客ごとの最新注文をROW_NUMBERで1件ずつ選びます。ordered_atはNULL不可、idは一意です。同じ注文日時でも毎回同じ行を選ぶには、どの並べ方が適切ですか?
答え: 顧客別にordered_at DESC, id DESCで並べる
同じ時刻の行の順序は、時刻だけでは決まりません。一意なidを第2の並べ替え条件にすれば、同時刻では大きいidを選ぶという規則が明確になります。顧客別のPARTITION BYも必要です。
一人の受講者が複数の講座を受けられ、一つの講座には複数人が参加します。同じ受講者の同じ講座への登録は1回だけです。受講登録表の一意性をどう定めるのが適切ですか?
答え: 受講者IDと講座IDの組に、一つの一意制約を設ける
一意にしたいのは受講者でも講座でもなく、その組合せです。両IDを必須の外部キーにし、組を主キーまたは一意制約にします。連番の登録IDを主キーにする場合でも、組の重複を別途防ぐ必要があります。
口座番号はテナント内だけで一意です。請求表にはテナントIDと口座番号があり、どちらも必須です。登録時に「そのテナントに属する口座」であることをDBで保証する方法はどれですか?
答え: 二列を組にした外部キーで、口座表の対応する二列を参照する
口座表のテナントIDと口座番号の組を候補キーにし、請求表から同じ組を一つの外部キーで参照します。テナントの存在と口座番号の存在を別々に調べても、その組が口座表の同じ行にあるとは限りません。
部署表で上位部署IDが同じ表の部署IDを参照し、最上位部署だけはNULLを許します。この自己参照外部キーだけでは防げない不整合はどれですか?
答え: 実在する二つの部署が、互いを上位部署として参照する
外部キーが検査するのは参照先の存在です。Aの上位がBで、Bの上位がAでも、両方の部署が実在すれば参照は成立します。階層を木として扱うには、上位変更時に自分へ戻る経路がないかも検査します。
過去の注文明細に、商品表への外部キーがあります。明細が残る商品の物理削除を、参照があることを理由に拒否したいとき、適切な削除規則はどれですか?
答え: ON DELETE RESTRICTで、明細から参照中の削除を拒否する
ON DELETE RESTRICTなら、参照している明細がある間は商品を削除できません。販売終了と履歴の消去は別の操作です。商品を販売対象から外すだけなら、商品行を残して販売状態を更新できます。
一つのトランザクションで注文を登録し、その後に任意のギフト包装を追加しました。包装だけを取り消し、注文を確定したい場合、どの手順が適切ですか?
答え: 注文登録後にセーブポイントを置き、包装追加後にそこへ戻して確定する
注文の登録後、包装を追加する前にセーブポイントを設定します。そこへロールバックすると、セーブポイント以後の包装だけが取り消されます。注文はまだ未確定なので、最後にトランザクション全体をコミットします。
商品1点を引き当てる際、在庫数が1以上のときだけ1を引きたいとします。在庫数は整数で対象商品は1行とし、競合エラーは別途処理します。在庫不足と引当成功を区別できる更新はどれですか?
答え: 在庫数が1以上の行だけを1減らし、更新行数で成否を判定する
商品IDと「在庫数が1以上」の両方をUPDATEの条件にし、在庫数をその場で1減らします。商品が存在する前提なら、更新1行で引当成立、0行で在庫不足です。先に読んだ値だけで判断すると、読取りと更新の間に別の引当が入る余地があります。
3拠点の測定値がそれぞれ10、20、NULLでした。NULLは未測定で、0とは区別します。測定値のある拠点だけの平均と、その求め方はどれですか?
答え: 欠測をそのままにしてAVGを使い、測定済み2拠点の15とする
AVGはNULLの入力を除いて平均を求めるため、(10+20)÷2で15です。未測定を0に置換したり、全行数を分母に使ったりすると、未測定の拠点も平均に含めた別の指標になります。
対象期間の売上が0行の日も、日次帳票に合計金額0を1行返したいとします。金額はNULL不可です。日付を絞った後、GROUP BYを使わない場合の集計式はどれですか?
答え: COALESCE(SUM(amount), 0)で、合計結果の欠落を補う
入力が0行でも、GROUP BYのない集計は1行を返します。ただしSUMの値はNULLです。集計結果をCOALESCEで0に置き換えます。SUMの内側で各行を置換しても、行そのものがない場合は効果がありません。
売上額が100、100、80、60の4店舗から、異なる売上額の上位2段階に属する店舗を全て選びます。同額を同じ順位とし、売上額だけの降順で順位付けする方法はどれですか?
答え: DENSE_RANKで順位を付け、順位が2以下の店舗を選ぶ
DENSE_RANKなら順位は1、1、2、3で、順位2までの3店舗を選べます。RANKでは同率首位が2店舗あるため次は3位です。取得したいのが店舗数なのか、異なる金額の段階数なのかを区別します。
入金額が取引順に100、20、30、40と並んでいます。一意な取引連番で並べ、現在行と直前2行だけの移動合計を求めます。4行目が90になる窓の指定はどれですか?
答え: ROWS BETWEEN 2 PRECEDING AND CURRENT ROWを使う
ROWSは並べた行を単位に範囲を決めます。4行目では2行前の20から現在の40までを足すので90です。先頭付近に2行前がなければ、実際に存在する行だけで計算します。取引間の時間間隔はこの窓幅に影響しません。