1.

次の中から、RDBMSリレーショナルデータベース管理システム)でないものとして、最も適切なものを選べ。

A. MySQL
B. PostgreSQL
C. SQLite
D. HeidiSQL


校正レポート

変更点ログ

要確認リスト



1. D

RDBMS(Relational DataBase Management System:リレーショナルデータベース管理システム)は、RDB(第3章を参照)の管理システムです。

MySQLは、オープンソースRDBMSの1つです (A)。さまざまなOSに対応しており、小規模なシステムから大規模なものまで対応できるという長所があります。開発がしやすく処理が速いことから、Webサービスエンタープライズ市場を含めたクラウドサービスでの利用が活発に行われています。

PostgreSQLは、オープンソースRDBMSの1つです (B)。POSTGRESプロジェクトとして、カリフォルニア大学バークレー校のコンピュータ・サイエンス学部で開発が開始されました。POSTGRESプロジェクトは、開始から10年後の1996年末にPostgreSQLと改名され、それがソフトウェアの名称にもなりました。

SQLiteは、サーバとして利用するのではなく、アプリケーションに組み込んで利用するRDBMSです (C)。SQLiteを用いると、簡易的な(ライトな)データベースを構築することができます。

HeidiSQLは、MySQLPostgreSQLSQLiteなどのデータベースシステムを実行しているコンピュータに接続し、データと構造を表示および編集できるクライアントツールです。GUIを利用してテーブルの種類や容量を確認したり、SQLクエリを発行するなどの操作を効率よく実施できます。

以上より、選択肢Dが正解です。

参考
企業活動を中断することなく継続していくためには、重要なデータを消失してしまった際に備えて、データのバックアップが重要です。RDBMSではバックアップを作成する仕組みが整っています。


校正レポート

変更点ログ

要確認リスト



2.

次のSQLは、「customer」というテーブルから「name」というカラムを呼び出すためのものである。

SELECT name ( ア ) customer ;

空欄に当てはまるとして、最も適切なものを選べ。

A. FROM
B. JOIN
C. ORDER BY
D. GROUP BY


校正レポート

変更点ログ

要確認リスト



2. A

SQLにおいて、データを取得するテーブルを指定する際に使用する句は、FROMです(A)。以下の形式で使用します。

構文 データを取得するテーブルを指定する

FROM テーブル名

JOINは、2つのテーブルを結合して1つのテーブルとして扱う際に使用する句です(B)(解答6 参照)。

ORDER BYは、SELECT句で取得したカラムに対して、昇順や降順といったルールでデータの並べ替えを実施する句です(C)(解答4参照)。

GROUP BYは、指定したテーブルをグループに分割する際に利用する句です(D)。HAVING句と併用して、分割したグループに対して集合関数を適用することができます。HAVING句は、いったん集計されたデータをもとに、さらにデータを条件抽出したい場合に用います。

参考
PostgreSQLやMySQLなどのデータベースから取り出したデータは、CSV形式でエクスポートすることができます。使用するデータベースによってさまざまなエクスポート形式がありますので、一度調べておくとよいでしょう。


校正レポート

変更点ログ

要確認リスト



3.

次のSQLは、「customer」というテーブルからすべてのカラムを呼び出すためのものである。

SELECT ( ア ) FROM customer ;

空欄アに当てはまる記号として、最も適切なものを選べ。

A. \$(ドルマーク)
B. *(アスタリスク)
C. !(エクスクラメーションマーク)
D. #(シャープ)


校正レポート

変更点ログ

要確認リスト



3. B

SELECT句「*」を利用した場合、「*」すべてのカラムを意味します。

構文 テーブルに含まれる全カラムを取得

SELECT * FROM テーブル名

したがって、選択肢B正解です。
その他の選択肢については、SELECT句において使用することができない記号です。


校正レポート

変更点ログ

要確認リスト



4.

price」というカラムを基準に昇順並べ替えを行いたい。

SELECT *
FROM purchases
( ア ) BY price ( イ ) ;

空欄ア、イに当てはまるの組み合わせとして、最も適切なものを選べ。

A. (ア) GROUP  (イ) DESC
B. (ア) GROUP  (イ) ASC
C. (ア) ORDER  (イ) DESC
D. (ア) ORDER  (イ) ASC


校正レポート

変更点ログ

要確認リスト



4. D

SQLには、データを操作するためのさまざまな句があります。
以下に代表的な句を示します。

DISTINCT
重複行を削除する場合に使用します。

構文 重複行を削除する
sql DISTINCT カラム名

例えば、以下では、name というカラム内で apple というフィールドが重複しています。

【フィールドが重複するテーブルの例】
<図12_103_2-1--->
図12_103_2-1 フィールドが重複するテーブルの例
<--->

name
apple
orange
grape
apple

この場合は、SELECT 文の後に「DISTINCT name」と指定することで、次のように重複を削除した出力を行うことができます。

【項目の重複を解除したテーブルの例】
<図12_103_2-2--->
図12_103_2-2 項目の重複を解除したテーブルの例
<--->

name
apple
orange
grape

apple という項目の重複がなくなり、1つだけになりました。
このように、DISTINCT句は、データを取得したそのカラム内のフィールド値を把握したいときに有効です。

13_104_1

ORDER BY

取得したデータに対し、並べ替えを行う句です。

構文 取得したデータの並べ替えを行う
sql ORDER BY カラム名

以下のテーブルでは price カラムに価格が表示されていますが、この price カラムを基準にレコードの並べ替えを行ってみましょう。

【ソート前のテーブルの例】

name price
apple 100
orange 80
grape 210

今回は、price カラムを基準に、昇順に並べ替えを行います。
昇順の場合は ASC、降順の場合は DESC を用います。
したがって、「ORDER BY price ASC」を適用すると、以下のような結果を取得することができます。

【ソート後のテーブルの例】

name price
orange 80
apple 100
grape 210

このように、ORDER BY句は、取得したデータの並べ替えを行いたい場合に有効です。

LIMIT

取得したデータに対し、最終的に取得するレコードの数を指定する句です。
SQLスクリプトに、LIMIT + 取得したい行数 という句を追加して使用します。ORDER BY句と併用して「上位○人」などの結果を取得したい場合に有効です。

以上より、組み合わせの正しい選択肢Dが正解です。


校正レポート

変更点ログ

要確認リスト



5.

amountの総和が10以上のstuff_idのみを問合せの対象にし、かつcustomer_id列昇順に並べ替えたい。(なお、RDBMSは「MySQL」の使用を仮定している。)

SELECT *
FROM purchases
WHERE
    stuff_id = 1
( ア )
    stuff_id
( イ ) SUM (amount) >= 10
( ウ )
    customer_id
LIMIT 10
;

空欄ア~ウに当てはまる句の組み合わせとして、最も適切なものを選べ。

A. (ア) GROUP BY  (イ) HAVING  (ウ) ORDER BY
B. (ア) GROUP BY  (イ) ORDER BY  (ウ) HAVING
C. (ア) ORDER BY  (イ) HAVING  (ウ) GROUP BY
D. (ア) ORDER BY  (イ) GROUP BY  (ウ) HAVING


校正レポート

変更点ログ

要確認リスト



5. A

SQLの記述の順番は以下のとおりです。

SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

以上より、設問の例の場合、空欄アにはGROUP BY、空欄イにはHAVING、空欄ウにはORDER BYが入ります。したがって、組み合わせが適切な選択肢Aが正解です。


校正レポート

変更点ログ

要確認リスト



6.

次のSQLを用いて複数のテーブルを結合することを考える。

SELECT
    table1.id,
    table2.price
FROM
    table1
( ア )JOIN
    table2
ON
    table1.id = table2.id
;

ここで、table1とtable2間のキーの値が一致するものだけを結合して取得したい場合、空欄アに当てはまる字句として、最も適切なものを選べ。

A. FULL
B. RIGHT
C. INNER
D. LEFT


校正レポート

変更点ログ

要確認リスト



6. C

SQLでは、複数のテーブルを結合することが可能です。結合方法には次のようなものがあります。

LEFT OUTER JOIN(左外部結合)
“左側テーブル”すべてと、指定した結合軸actor_id)の値が一致する“右側テーブル”を結合します。結合元となるテーブルの値は失わずに、新たに結合するテーブルの重複した値だけを取得したい場合に有効な手段です。LEFT OUTER JOIN句は、「LEFT JOIN」というように省略した記述でも使用することが可能です(D)。
次の図では、右側テーブルの「actor_id」は左側テーブルに存在しないフィールドを含んでいます。LEFT OUTER JOINでは、そのような存在しないフィールドをもつレコードは結合後には残りません。
値の結合に関する概念図(ベン図)と合わせると、結合の結果をイメージしやすいでしょう。なお、ベン図のグレーの部分が結合後のidを表しています。

【LEFT OUTER JOIN】

左側テーブル

actor_id first_name
1 Penelope
2 Nick
3 Ed
4 Jennifer

右側テーブル

actor_id film_id
1 1
1 23
2 3
3 17
5 19

【LEFT OUTER JOIN実行後】

actor_id first_name film_id
1 Penelope 1
1 Penelope 23
2 Nick 3
3 Ed 17
4 Jennifer NULL

結合軸が一致しなかったレコードは、NULLと表示されます。

FULL OUTER JOIN(完全外部結合)

結合軸の値を元に、"左側テーブル"と"右側テーブル"のすべての値を結合します。元のテーブルに新たなテーブルの全レコードを追加したい場合に有効です。FULL OUTER JOIN句は、「FULL JOIN」というように省略した記述でも使用することが可能です(A)。

【FULL OUTER JOIN】

左側テーブル

actor_id first_name
1 Penelope
2 Nick
3 Ed
4 Jennifer

右側テーブル

actor_id film_id
1 1
1 23
2 3
3 17
5 19

FULL OUTER JOINを使って、左側テーブルと右側テーブルをactor_idで結合した結果は次のとおりです。

【FULL OUTER JOIN実行後】

actor_id first_name film_id
1 Penelope 1
1 Penelope 23
2 Nick 3
3 Ed 17
4 Jennifer NULL
5 NULL 19

INNER JOIN(内部結合)

“左側テーブル” と “右側テーブル” で結合軸actor_id)の値が一致するものを結合します。どちらのテーブルにも存在するレコードのみを抽出したい場合に有効な手段です。

【INNER JOIN】

【INNER JOIN実行後】

actor_id first_name film_id
1 Penelope 1
1 Penelope 23
2 Nick 3
3 Ed 17

以上より、選択肢Cが正解です。

RIGHT OUTER JOIN(右外部結合)

“右側テーブル” すべてと、指定した結合軸actor_id)の値が一致する “左側テーブル” を結合します。LEFT OUTER JOIN句において表名の配置を変更することで、RIGHT OUTER JOINと同じ結合結果を表示することができます(B)。

試験対策
データのNULL値が含まれる場合、SQLを用いて他の値で置換することが可能です。例えば、MySQLにおいてNULL値の置き換えをする際には、IFNULL関数COALESCE関数を使用できます。このように、使用するRDBMSによって関数名が異なる場合があるので注意しましょう。

試験対策
テーブル結合を応用すればデータの突き合わせを行うことができるということを覚えておきましょう。


校正レポート

変更点ログ

要確認リスト



7.

次のSQLを用いて、「paymentテーブル」の中から「amountカラム」と「payment_dataカラム」を取得したい。ただし、「amount」はinteger型、「payment_data」はtext型でそれぞれ取得しなければならないものとする。
(RDBMSは「PostgreSQL」の使用を仮定している。)

SELECT
    ( ア )(amount AS int) AS amount,
    payment_data ( イ )text
FROM
    payment
;

空欄アに当てはまる句、また空欄イに当てはまる記号の組み合わせとして、最も適切なものを選べ。

A. (ア)CAST   (イ)::(コロン2つ)
B. (ア)CAST   (イ);;(セミコロン2つ)
C. (ア)text   (イ)::(コロン2つ)
D. (ア)text   (イ);;(セミコロン2つ)


校正レポート

変更点ログ

要確認リスト



7. A

SQLでは、指定したカラムデータ型を変換することができます。

構文 カラムのデータ型を変換

CAST(カラム名 AS データ型)

このCAST構文は、標準SQLで用いられます。

PostgreSQLでは、::(コロン2つ)を付けることでもCASTを使用でき、以下のような形式で使用します。

構文 PostgreSQLにおけるCAST構文

カラム名 :: データ型

コロンを用いる構文は、PostgreSQLで伝統的に使用されている形式です。
以上より、選択肢Aが正解です。


校正レポート

変更点ログ

要確認リスト



8.

次のSQLを用いて、「customer」というテーブルから「id」というカラムを取得することを考える。なお、取得したデータのうち10件をランダムサンプリングしている。

SELECT id
FROM customer
( ア ) BY random()
( イ ) 10
;

空欄に当てはまる字句の組み合わせとして、最も適切なものを選べ。

A. (ア)GROUP   (イ)LIMIT
B. (ア)GROUP   (イ)COUNT
C. (ア)ORDER   (イ)LIMIT
D. (ア)ORDER   (イ)COUNT


校正レポート

変更点ログ

要確認リスト



8. C

SQLにおけるレコードの無作為抽出は、ORDER BYRANDOM関数を組み合わせることで実現できます。取得件数制限には、LIMITを使用します(解答4参照)。ORDER BY random() でテーブルのレコードをランダムに並べ替え、その後 LIMIT によって指定した数だけレコードを取得します。

ただし、何十万ものレコードをもつテーブルの場合、ORDER BYによる並べ替え処理はCPUに大きな負荷をかけることがあるため、注意が必要です。

以上より、組み合わせが適切な選択肢Cが正解です。

18_106_2


校正レポート

変更点ログ

要確認リスト



9.

次のSQLを用いて、「$customer$」というテーブルから「$score$」というカラムを取得することを考える。ただし、取得した「$score$」カラムの値が80以上のとき、「OK」という表示になるように値を変換している。

SELECT
    ( ア )
        WHEN score >= 80 ( イ ) 'OK'
        ELSE 'NG'
    END
FROM customer
;

空欄ア、イに当てはまる語句の組み合わせとして、最も適切なものを選べ。

A. (ア)CASE (イ)THEN
B. (ア)CASE (イ)WHERE
C. (ア)IF (イ)THEN
D. (ア)IF (イ)WHERE


校正レポート

変更点ログ

要確認リスト



9. A

SQLでは、条件分岐を行うためにCASE式というものが用意されています。CASE式の記法は、単純CASE式検索CASE式の2つに大別されます。以下の例では、$status$カラムの値(松、竹、梅)と、そのときに返す値(1、2、3)を指定しています。

単純CASE式では、先にカラム名を指定し、後から条件を記載することで条件分岐を行います。

単純CASE式

sql CASE status WHEN '松' THEN 1 WHEN '竹' THEN 2 WHEN '梅' THEN 3 ELSE 0 END

検索CASE式では、等号($=$)以外の演算も行って値を評価できるため、単純CASE式よりも柔軟性があります。設問では、この検索CASE式を使用して条件分岐を行っています。

検索CASE式

sql CASE WHEN status = '松' THEN 1 WHEN status = '竹' THEN 2 WHEN status = '梅' THEN 3 ELSE 0 END

WHERE句の後に条件式を記載することで、データ抽出の際の条件指定を行うことができますが、CASE式の中では使用できません。また、SQLにおいてIF文の処理を行う際に使用するのがCASE文であり、SQL Server(2012以降)以外でSQLに直接IF関数を記述することはできません。

以上より、組み合わせが適切な選択肢Aが正解です。


校正レポート

変更点ログ

要確認リスト



10.

次のSQLを用いて、「$data\_a$」「$data\_b$」という2つのテーブルから「$id$」「$name$」というカラムを取得することを考える。ただし、SELECT文で取得したそれぞれのテーブルは重複を削除した上で結合するものとする。

SELECT id,name
FROM data_a
( ア )
SELECT id,name
FROM data_b
;

このとき、空欄アに当てはまる語句として、最も適切なものを選べ。

A. JOIN
B. FULL OUTER JOIN
C. UNION
D. INNER JOIN

06_100_2


校正レポート

変更点ログ

要確認リスト



10. C

複数の SELECT文 で取得したデータを結合する句は UNION句 です(C)。
結合するテーブル間に 重複 がある場合、その部分は無視されますが、「 UNION ALL 」を指定することで、 重複も含めた結合 を行うことができます。

重複のないテーブル同士を UNION句 を用いて結合する際のイメージは以下のとおりです。

【UNION句を用いた結合】


校正レポート

変更点ログ

要確認リスト



11.

次のSQLを用いて、「employee」というテーブルを作成し、さらに「code」「name」というカラムを定義し、各レコード値を代入することを考える。

( ア ) TABLE employee (
                code SERIAL NOT NULL,
                name VARCHAR(255)
                );
( イ ) INTO employee (
                code, name
                )
VALUES
        (0, 'Taro'),
        (1, 'Ken'),
        (2, 'Hanako'),
        (3, 'Yui'),
        (4, 'Yuki')
;

空欄ア、イに当てはまる語句の組み合わせとして適切なものを選べ。

A. (ア) CREATE (イ) INSERT
B. (ア) MAKE (イ) INSERT
C. (ア) CREATE (イ) JOIN
D. (ア) MAKE (イ) JOIN


校正レポート

変更点ログ

要確認リスト



11. A

SQLで新しくテーブルを作成する際の基本構文は以下のとおりです。

構文 テーブルの作成
sql CREATE TABLE テーブル名 ( 列名 データ型 オプション, 列名 データ型 オプション, ... );

SQLで使用することのできるデータ型には以下のようなものがあります。

20_107_2

【SQLで使用できるデータ型】

区分 分類名 型の例
数値型 整数型 int、bigintなど
浮動小数点型 floatなど
通貨型 money
日付型 date、datetimeなど
文字列型 Unicode文字列 nchar、ntextなど
非Unicode文字列 char、textなど

また、テーブル作成時に指定できるオプションの一例としては以下のようなものがあります。

【テーブル作成時に指定できるオプション例】

オプション名 機能
IF NOT EXISTS 同名のテーブルが存在しなければ、テーブルを作成する
NOT NULL nullの保存を禁止する
AUTO_INCREMENT 新しい行が設定されるごとに自動的にカラム番号を付与
DEFAULT カラムのデフォルト値を設定する

作成したテーブルにデータを挿入する際の構文は以下のとおりです。

構文 データの挿入

INSERT INTO テーブル名(
                列名,
                列名,
                ...
                )

VALUES
    (データ),
    (データ),
    ...
;

したがって、組み合わせが適切な選択肢Aが正解です。

なお、SQLにはMAKEという句は存在しません。

参考
VALUESで指定する1レコードの要素数は、INSERTで指定したカラムの数と一致する必要があります。


校正レポート

変更点ログ

要確認リスト



12.

次のSQLを用いて、「employeeテーブル」からデータを取得することを考える。ただし、「product_orderテーブル」と「employeeテーブル」の「code」が一致した場合のみ、SELECTを実行し、「code」と「name」カラムを取得するようにしたい。

SELECT code, name
FROM employee AS e
WHERE
      ( ア )
      (
        SELECT * FROM product_order
        WHERE
              product_order.code = e.code
      );

このとき、空欄に当てはまる字句として適切なものを選べ。

A. CREATE
B. MAKE
C. IF
D. EXISTS


校正レポート

変更点ログ

要確認リスト



12. D

EXISTS句では、指定した条件に合致するレコードが存在するかどうかを判定することができます(D)。
設問のSQLでは、「それぞれのテーブル間でcodeという結合軸が一致するか」を判断し、一致する場合のみSELECT文を実行するようにしています。
以下に、設問のSQLを実行した際のレコードの取得イメージを示します。

【product_orderテーブルとemployeeテーブルのイメージ】
<図21_201_1-1--->
図21_201_1-1 product_orderテーブルとemployeeテーブルのイメージ
<--->

product_order(注文)テーブル

order_id product code
0001 aaa 0
0002 bbb 0
0003 ccc 2
0004 ddd 3
0005 eee 4

employee(社員)テーブル

code name
0 Taro
1 Ken
2 Hanako
3 Yui
4 Yuki

以上2つのテーブルに対し、設問のSQLを実行すると以下のような結果を得ます。

code name
0 Taro
2 Hanako
3 Yui
4 Yuki

CREATE新しくテーブルを作成する際に使用します(A)。


校正レポート

変更点ログ

要確認リスト



13.

次の中から、SQLで用いる「数値型(数値データ型)」の名称でないものを選べ。

A. numeric
B. integer
C. smallint
D. boolean


校正レポート

変更点ログ

要確認リスト



13. D

boolean は、真偽値を表す論理値データ型です(D)。
その他の選択肢はすべて数値型数値データ型)に属します。以下に数値データ型の一覧を示します。

数値型数値データ型)】

名称 説明
bigint 8バイト符号付き整数 $-9\,223\,372\,036\,854\,775\,808$ ~ $+9\,223\,372\,036\,854\,775\,807$
integer 4バイト符号付き整数 $-2\,147\,483\,648$ ~ $+2\,147\,483\,647$
smallint 2バイト符号付き整数 $-32\,768$ ~ $+32\,767$
numeric 任意精度の小数 小数点より上は $131\,072$ 桁まで、小数点より下は $16\,383$ 桁まで
double precision 15桁精度の浮動小数 およそ $-1 \times 10^{308}$ ~ $+1 \times 10^{308}$ の範囲

参考
PostgreSQL における文字列型としては、charvarchartext などが存在します。文字コードは、コンピュータ上で文字を処理したり通信したりするために、文字に番号を割り振る規則です。文字の形そのものではなく、例えば Unicode の場合、Aは $41$、Bは $42$ といったように、その文字に対応する番号によって文字の種類を表現します。
現在では、情報通信技術の発達や各国語への対応の過程でさまざまな文字コードの規格が考案され、並立しています。例えば、Windowsでは日本語に対応する文字コードとして Shift-JIS が採用されていますが、Macでは UTF-8Unicode という文字コード規格の中の一方式)が採用されています。
このような事情から、文字列型のデータを扱う際には、用途や使用環境に合わせて適切に文字コードを設定する必要があります。テキストファイルの文字コードを変換するための方法として、nkf (Network Kanji Filter) コマンドの利用などが挙げられます。


校正レポート

変更点ログ

要確認リスト



14.

PostgreSQLにおいて、RANDOM関数を使用する際に値の生成範囲を指定しない場合を考える。この場合、生成される乱数 $x$ の範囲として適切なものを選べ。

A. 0以上1未満浮動小数点値
B. 0以上1以下の整数値
C. -1以上1未満の浮動小数点値
D. -1以上1以下の整数値


校正レポート

変更点ログ

要確認リスト



14. A

PostgreSQLでは、乱数を生成する関数(RANDOM関数)を利用できます。
RANDOM関数では、特に生成範囲を指定しない場合、0以上1未満の浮動小数点値が生成されます(A)。
RANDOM関数は次のように記述されます。

構文 RANDOM関数

random()

上の例では引数を指定していませんが、引数を指定すると、乱数のもととなるシード(種)を固定することができます。シードを固定することで、複数回乱数を生成する場合に、同じ引数に対しては毎回同じ乱数が生成されるようになります。

試験対策
RANDOM関数を応用すると、テーブルからレコードをランダムに取得できます。


校正レポート

変更点ログ

要確認リスト



15.

次のSQLを用いて、「film」テーブルから「title」というカラムを取得することを考える。ただし、テーブルの「description」というカラムに「funny」という単語を含むものだけを取得するようにしたい。

SELECT title
FROM film
WHERE description ( ア ) '%funny%'
;

このとき、空欄アに当てはまる語句として適切なものを選べ。

A. LIKE
B. IN
C. =
D. ==


校正レポート

変更点ログ

要確認リスト



15. A

LIKE演算子は、指定した条件が検索文字列に合致した場合にTRUEを返す演算子です。
この機能を用いて文字列検索を行うことができます。カラム内の各フィールド値に対してパターンマッチを行い、TRUEを返すもの(パターンに合致するもの)だけ取得する際に、WHERE句の中でLIKE演算子を用います(A)。
なお、LIKE演算子によるパターンマッチは常に文字列全体に対して行われます。

パターンマッチに指定する文字列には、2種類の特殊記号を用いることができます。
これにより、文字列の検索時にワイルドカード指定を行うことができます。

【パターンマッチに指定する特殊記号】

記号 説明
%(パーセント) 0文字以上の任意の文字列 %funny%
(This is a funny movieがマッチ)
_(アンダーバー) 任意の1文字 app_e(appleがマッチ)

校正レポート

変更点ログ

要確認リスト



16.

ある都道府県における会社員の年収を調査し、調査結果を「income」テーブルに格納した。この「income」テーブルからデータを取得することを考える。「towns」は「町名」、「annual_income」は「年収」、「age」は「年齢」を表すものとするとき、以下のSQLを実行して表示される結果の説明文として、最も適切なものを選べ。

SELECT towns, AVG(annual_income)
FROM income
WHERE 20 <= age AND age < 30
GROUP BY towns
ORDER BY AVG(annual_income) DESC
;

A. 町名ごと20代の会社員の最高年収を計算し、町名とともに最高年収を降順で取得する
B. 町名ごと20代の会社員の平均年収を計算し、町名とともに平均年収を降順で取得する
C. 町名ごと20代の会社員の平均年収を計算し、町名とともに平均年収を昇順で取得する
D. 町名ごと20代の会社員の最低年収を計算し、町名とともに最低年収を昇順で取得する


校正レポート

変更点ログ

要確認リスト



16. B

SQLでは、SELECT文で取得したデータに対して集合関数を用いて最大値最小値を集計することができます。以下に主な集合関数の一覧を示します。

【主な集合関数】

関数 実行内容
SUM 総和を求める
MAX 最大値を求める
MIN 最小値を求める
AVG 平均値を求める
COUNT 行数を求める

設問のSQLのSELECT文で用いられている集合関数はAVGのため、平均値が計算されます。また、ORDER BY カラム名 DESC は指定したカラム内のデータを降順に並べ替えます。
以上より、選択肢Bが正解です。

参考
平均値中央値最頻値など、主な代表値の意味と算出方法を把握しておきましょう。
PostgreSQLなどのRDBMSでは、中央値はPERCENTILE_CONT関数の引数を0.5とすることで、最頻値はMODE関数を使うことで、それぞれ求めることができます。


校正レポート

変更点ログ

要確認リスト

← → キーで移動 / Ctrl+P でPDF保存