SQLテスト - 上級編

このテストは、SQL Serverにおけるウィンドウ関数、共通テーブル式(CTE)、高度なデータ操作など、より複雑なSQLスキルを測定することを目的としています。

注: 各問題の解答は、SQL Serverの構文に基づいて記述してください。

問題

以下のテーブル定義とデータ(テストデータで投入されるもの)を考慮して解答してください。

テーブル定義: Sales (売上データ)

CREATE TABLE Sales (
    SaleID INT PRIMARY KEY IDENTITY(1,1),
    ProductID INT NOT NULL,
    SaleDate DATE NOT NULL,
    Quantity INT NOT NULL,
    UnitPrice DECIMAL(10, 2) NOT NULL,
    Region NVARCHAR(50), -- 'East', 'West', 'North', 'South' など
    Enabled BIT DEFAULT 1,
    InsertDate DATETIME DEFAULT GETDATE(),
    UpdateDate DATETIME DEFAULT GETDATE(),
    DeleteDate DATETIME,
    UpdateUser NVARCHAR(50)
);
            

テーブル定義: Products (商品情報 - 再掲)

CREATE TABLE Products (
    ProductID INT PRIMARY KEY IDENTITY(1,1),
    ProductName NVARCHAR(100) NOT NULL,
    Price DECIMAL(10, 2) NOT NULL,
    StockQuantity INT,
    Enabled BIT DEFAULT 1,
    InsertDate DATETIME DEFAULT GETDATE(),
    UpdateDate DATETIME DEFAULT GETDATE(),
    DeleteDate DATETIME,
    UpdateUser NVARCHAR(50)
);
            
問題 3.1 (ウィンドウ関数 - RANK): 各商品(ProductID)について、売上日(SaleDate)ごとに最も売れた(Quantityが最大)上位3つの販売記録を、販売日と数量でランク付けして取得するSQL文を記述してください。同じ数量の場合は同じランクとし、次のランクを飛ばしてください。有効な販売記録のみを対象とします。

解答欄:

問題 3.2 (CTEと集計): 共通テーブル式(CTE)を使用して、各地域(Region)の月ごとの総売上高を計算し、最も総売上高が高い月の地域と売上高を表示するSQL文を記述してください。有効な販売記録のみを対象とします。

解答欄:

問題 3.3 (UPDATE FROM と条件付き更新): ProductsテーブルのStockQuantityを更新します。もし2024年に入ってから販売実績がない有効な商品があれば、その商品のStockQuantityを10%増加させるSQL文を記述してください。ただし、増加後のStockQuantityが1000を超える場合は1000に制限し、UpdateUserも適切に設定してください。

解答欄:

問題 3.4 (UNION ALL とデータ整形): 各地域(Region)と各商品(ProductName)について、それぞれ総売上高を計算し、2つの結果セットを1つに結合して表示するSQL文を記述してください。結合後の結果セットには、「タイプ」('Region'または'Product')、「名前」(地域名または商品名)、「総売上高」の列を含めてください。有効な販売記録と商品のみを対象とします。

解答欄:

問題 3.5 (PIVOT/CASE と集計): 各商品(ProductName)について、地域別('East', 'West', 'North', 'South')の総売上高を列として表示するSQL文を記述してください。該当地域に売上がない場合は0と表示してください。有効な販売記録と商品のみを対象とし、`PIVOT`句または`CASE`式と集計関数を組み合わせて使用してください。

解答欄:

目次へ戻る