PD試験 データ・AI

PD試験(仮称)データ・AI区分 サンプル問5(物件検索のSQLと結果行数)の解説

プロフェッショナルデジタルスキル(データ・AI)試験(仮称)の科目Bサンプル問5を、スマホで解いて確かめられます。統計情報から、ANDとORの結果行数を見積もる計算と、百分率を求めるSQLの式を解説します。

PD試験 データ・AI

科目Bサンプル問題 問5

IPA 公表問題

先に設問を確認

設問 表3 中の[ a ],[ b ]に入れる字句の組合せを,解答群の中から選べ。

設問と解答群へ移動

A 社は,不動産賃貸仲介業を全国規模で行っている。RDBMS を用いて物件情報検索システム(以下,検索システムという)を運用している。

検索システムは,物件を管理するシステムを補完するシステムであり,担当者が接客するとき,当該システムの“物件”テーブルを利用している。

1. 担当者による接客業務の概要

  • (1) 物件を探している借主に対して,当該借主の希望に近い物件を探す支援を行い,借主と貸主との間の交渉・賃貸契約の仲介を行う。
  • (2) 物件の貸主に対して,物件の審査を行う。当該貸主に長期の空き物件がある場合,周辺の競合物件の付帯設備(以下,設備という)の設置状況を調査し,当該空き物件に人気の設備を増強することなど,物件の付加価値を高める対策の助言を行うこともある。

2. “物件”テーブル

  • (1) A 社が仲介する全ての物件を,物件コードで一意に識別する。
  • (2) 物件の沿線,最寄駅,賃料,間取りなどの基本属性を記録する列がある。
  • (3) エアコン,オートロックなどの設備が設置されているかどうかの有無を記録する列があり,一つの物件に20 個の設備の有無を記録できる。
  • (4) “物件”テーブルの全ての列にNOT NULL 制約を指定している。

3. “物件”テーブルのテーブル構造,主な列の意味と制約及び主な統計情報

“物件”テーブルのテーブル構造を図1 に,主な列の意味・制約を表1 に,RDBMS の機能を用いて取得した主な統計情報を表2 に示す。

図1 “物件”テーブルのテーブル構造(一部省略)

  • 物件(物件コード,物件名,沿線,最寄駅,賃料,間取り,向き,専有面積,築年数,都道府県,市区町村,エアコン,オートロック,…)
表1 “物件”テーブルの主な列の意味・制約(一部省略)
列名意味・制約
物件コード物件を一意に識別するコード
沿線物件から利用可能な最寄駅のうち代表的な沿線の名前
エアコン,オートロック,…当該設備が設置されているかどうかの有無を示す値
Y:設置あり,N:設置なし
表2 “物件”テーブルの主な統計情報
テーブル名行数列名列値個数
物件1,600,000物件コード1,600,000
沿線400
エアコン2
オートロック2

運用部門では検索システムの処理を把握するため,現在検索できる設備の組合せを述語に指定したSQL 文を調査した。そのSQL 文の例を,表3 に示す。またSQL 文の結果行を保存するファイルの所要量を見積もる目的で,表3 の各SQL 文の結果行数を見積もった。見積りに当たっては,沿線,エアコン,オートロックの列値の分布は互いに独立であり,各列の列値は一様分布に従うと仮定した。

表3 設備の組合せを述語に指定したSQL 文の例(未完成) SQL1
項目内容
目的沿線が○△線であり,かつ,設備にエアコンとオートロックの両方がある物件を調べる。
見積もった結果行数1,000
SQL 文SELECT 物件コード, 物件名 FROM 物件
WHERE 沿線 = '○△線'
AND ( エアコン = 'Y' AND オートロック = 'Y' )
表3 設備の組合せを述語に指定したSQL 文の例(未完成) SQL2
項目内容
目的沿線が○△線であり,かつ,設備にエアコン又はオートロックのいずれかがある物件を調べる。
見積もった結果行数[ a ]
SQL 文SELECT 物件コード, 物件名 FROM 物件
WHERE 沿線 = '○△線'
AND ( エアコン = 'Y' OR オートロック = 'Y' )
表3 設備の組合せを述語に指定したSQL 文の例(未完成) SQL3
項目内容
目的設備にエアコンとオートロックの両方がある物件を沿線ごとに集計した物件数が,全物件数に占める割合を百分率(小数点以下切捨て)で求める。
見積もった結果行数400
SQL 文WITH TEMP ( TOTAL ) AS ( SELECT COUNT(*) FROM 物件 )
SELECT 沿線, FLOOR( [ b ])
FROM 物件 CROSS JOIN TEMP
WHERE エアコン = 'Y' AND オートロック = 'Y'
GROUP BY 沿線, TOTAL

注記 FLOOR 関数は,引数以下の最大の整数を計算する。

設問 表3 中の[ a ],[ b ]に入れる字句の組合せを,解答群の中から選べ。

解答群
答えと選択肢ごとの根拠を見る

正解:オ(a 3,000/b COUNT(*) * 100 / TOTAL) IPA 公表の解答例による

  • ア × 誤り OR の件数を AND と同じと考え、割合の式に100を掛け忘れた

    a 1,000/b COUNT(*) / TOTAL

    a・b ともに誤り。a:「エアコン又はオートロック」は、どちらか一方でも設置されている物件で、AND(両方)の1,000行より多くなる。3,000行になる。b:COUNT(*) / TOTAL は割合で1以下の値になり、FLOOR で小数点以下を切り捨てると0になる。百分率にするには100を掛ける。

  • イ × 誤り OR の件数を AND と同じと考えた

    a 1,000/b COUNT(*) * 100 / TOTAL

    b は正しい。a が誤り。「エアコン又はオートロック」は、どちらか一方でも設置されている物件を数えるので、両方が設置されている物件(AND、1,000行)より多くなる。3,000行になる。

  • ウ × 誤り OR の件数を AND と同じと考え、SUM を件数の集計に使えると考えた

    a 1,000/b SUM(*) / TOTAL

    a・b ともに誤り。a:OR の結果は、AND の1,000行より多い3,000行になる。b:SUM は列の値を合計する関数で、SUM(*) は書けない。行数を数えるのは COUNT(*)。割合を百分率にするには100も掛ける。

  • エ × 誤り 百分率にするために100を掛ける必要があることを忘れた

    a 3,000/b COUNT(*) / TOTAL

    a は正しい。b の COUNT(*) / TOTAL は、割合を 0 から 1 の値で求める式。FLOOR で小数点以下を切り捨てると、0になる。百分率にするには100を掛ける必要がある。

  • オ ○ 正しい

    a 3,000/b COUNT(*) * 100 / TOTAL

    a:沿線が○△線の物件は、1,600,000行÷沿線400通り=4,000行。このうち、エアコンが設置されている物件は2分の1、設置されていない物件も2分の1(列値は2通りで一様分布)。「エアコン又はオートロック」は、「どちらもない」を除いたものなので、4,000×(1-1/2×1/2)=3,000行。b:設備が両方ある物件を沿線ごとに数えた件数(COUNT(*))が全物件数(TOTAL)に占める割合を百分率にするので、COUNT(*) * 100 / TOTAL。

  • カ × 誤り SUM を件数の集計に使えると考えた

    a 3,000/b SUM(*) / TOTAL

    a は正しい。b が誤り。SUM は列の値を合計する関数で、SUM(*) は書けない。行数を数えるのは COUNT(*)。また、割合を百分率にするには100も掛ける。

  • キ × 誤り 沿線で絞った件数がそのまま結果になると考え、百分率にするための100を忘れた

    a 4,000/b COUNT(*) / TOTAL

    a・b ともに誤り。a:4,000行は、沿線が○△線の物件の数で、設備の条件で絞る前の件数。条件を加えると減る。b:COUNT(*) / TOTAL は割合で1以下の値になり、FLOOR で小数点以下を切り捨てると0になる。

  • ク × 誤り 沿線で絞った件数がそのまま結果になると考えた

    a 4,000/b COUNT(*) * 100 / TOTAL

    b は正しい。a が誤り。4,000行は、沿線が○△線の物件の数で、設備の条件で絞る前の件数。設備の条件を加えると、AND なら1,000行、OR なら3,000行に減る。

  • ケ × 誤り 沿線で絞った件数がそのまま結果になると考え、SUM を件数の集計に使えると考えた

    a 4,000/b SUM(*) / TOTAL

    a・b ともに誤り。a:4,000行は、沿線で絞っただけの件数。設備の条件で、3,000行に減る。b:SUM は列の値を合計する関数で、SUM(*) は書けない。

出典:プロフェッショナルデジタルスキル(データ・AI)試験(仮称) 科目B のサンプル問題 問5独立行政法人情報処理推進機構(IPA)(掲載)原文を開く(確認)表3(3列)をスマホで読めるよう、SQL ごとの3つの表に分けました。SQL 文は、1行を複数の行に分けて示しました。空欄の枠を[ ]で示しました。問題文・表・設問・解答群の文言は原文のままです。

この問題の誤りを報告
どこが違いますか

名前や連絡先は書かないでください。内容は訂正の確認にだけ使い、90日で削除します。

解説

答えはオ:aは3,000、bはCOUNT(*) * 100 / TOTAL

正解はオ(aが3,000、bがCOUNT(*) * 100 / TOTAL)です。IPAは出題趣旨で、この問題を、不動産業の物件情報検索システムを題材に、RDBMSにおけるSQLを使ったデータ操作の理解と、統計情報に基づく処理結果(データ量)の予測を問うものとしています。

空欄aは結果行数の見積り(計算)、空欄bはSQLの式(文法)です。別々に決めて、解答群の組合せを探します。

空欄a:SQL1の1,000行から、ORの行数を出す

表2の統計情報から、物件は1,600,000行、沿線は400通り、エアコンとオートロックは各2通り(Y・N)です。すべての値が一様に分布し、列どうしが独立だと仮定されています。

SQL1(沿線が○△線、エアコンとオートロックが両方ある)の結果行数は、次のようになります。

  • 沿線が○△線の物件:1,600,000 ÷ 400 = 4,000行
  • エアコンがYの割合は1/2、オートロックがYの割合は1/2
  • 4,000 × 1/2 × 1/2 = 1,000行

SQL2は、エアコン「又は」オートロックです。両方とも設置されていない物件を除けばよいので、割合は 1 − 1/2 × 1/2 = 3/4 です。4,000 × 3/4 = 3,000行になります。

1,000行(ア〜ウ)は、ANDの結果で、ORの数ではありません。4,000行(キ〜ケ)は、設備の条件を付ける前の数です。

空欄b:割合は100を掛けてからFLOORする

SQL3は、エアコンとオートロックが両方ある物件を、沿線ごとに数えて、全物件数(TOTAL)に対する割合を百分率で求めます。

  • 両方がある物件を沿線ごとに数えた件数が COUNT()。割合は COUNT() ÷ TOTAL。
  • COUNT() / TOTAL は、1より小さい値です。FLOORで小数点以下を切り捨てると0になるので、百分率にはなりません。100を掛けて、COUNT() * 100 / TOTAL にします。
  • SUM() は、書き方として成り立ちません。SUMは列の値を合計する関数で、行を数えるのは COUNT() です。

よって、bは COUNT(*) * 100 / TOTAL です。

間違えやすいところ:「又は」の数を、「かつ」と同じにする

SQL1の1,000行が表に書かれているので、SQL2も同じ数だと思い込むのが、誤りの典型です。ANDは「両方」、ORは「どちらか」なので、ORのほうが行数は多くなります。1,000行のままなら、SQL1とSQL2で絞り込みの強さが同じということになり、条件が違う意味がありません。

もう1つは、百分率の式で100を掛け忘れるものです。割合をそのまま求める式は、FLOORで0になります。問題文の「百分率(小数点以下切捨て)」という指示を、式に反映します。

時間をかけないコツ:aを先に決める

解く時間の目安は5分ほどです(当サイトの推測)。ORの結果は、ANDの1,000行より多く、沿線で絞っただけの4,000行以下になります。1,000を外し、4,000は沿線で絞った全行が当てはまる場合に限るので、計算しなくても、3,000のエ・オ・カに絞れます。bは、SUM(*) を外し、100を掛けた式を選べば、オです。

実務の目で見ると:行数の見積りは、独立と一様の前提で決まる

この計算は、列の値が一様に分布し、列どうしが独立だという前提の上でのものです。実際の物件では、沿線によって物件数は偏り、エアコンとオートロックの設置も、築年数や賃料と関係します。見積りは、ファイルの所要量を概算するためのもので、実際の行数とは差が出ます。

シラバス案(Ver.0.1)の科目Bの項目「4-1」には、集約関数などを使って高度な計算を行うSQL文を記述するスキルが含まれています。この問題は、SQL文を書く力に加えて、統計情報から結果を見積もる力を問う形になっています。

この解説について

問題と解答例はIPAの公表物です。選択肢ごとの根拠と解き方は、当サイトが書いた解説で、IPAの公式な解説ではありません(IPAは解説を公表していません)。出典は、IPAの「プロフェッショナルデジタルスキル(データ・AI)試験(仮称)科目Bのサンプル問題」(2026年10月30日掲載)です。問題文は出典を明記して、教育目的で載せています。IPAによると、サンプル問題は新しい出題分野と形式のイメージを共有するためのもので、実際の試験と同様の問題作成やチェックのプロセスを経たものではありません。

次に読む

参考にした資料