1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

SAP HANA Cloud: SAP BTP Free TrialでHANAのSQLコンソールからクエリを実行しよう

Last updated at Posted at 2024-01-27

こちらの記事の続きです。

前回はHANAのユーザと権限ロールを作成しましたので、今回はHANAのSQLコンソールからクエリを実行したいと思います。今回はこちらのTutorialを参照しています。 

まず最初に"Open in SAP HANA Database Explorer"を開きます。
スクリーンショット 2024-01-27 13.37.36.png

画面左上の”Open the SQL Console”をクリックしてSQLコンソールを開きます。キーボードのショートカットでも開くことができます(WindowsはCtrl+Alt+C、MacはCommand+Option+C)。
スクリーンショット 2024-01-27 13.39.34.png

SQLコンソールが開きます。(私は何回か開き直したためコンソールの番号が4になっていますが、通常は1から開きます。)
スクリーンショット 2024-01-27 13.45.12.png

今回は、こちらの投稿でインポートしたSLIGHTというスキーマを使用します。
https://qiita.com/IT_Tech_Firm/items/fa2343e0ccd77e05b6f2

以下のクエリを実行して、スキーマをSFLIGHTにします。

SET SCHEMA SFLIGHT;

スクリーンショット 2024-01-27 13.49.46.png

実行ボタンを押します。
スクリーンショット 2024-01-27 13.51.14.png

SQLコンソール右上のスキーマからDBADMINからSFLIGHTに変わります。
スクリーンショット 2024-01-27 13.52.14.png

今回のTutorialでは、最も人気のあるBest Run Travel代理店を見つけるためのクエリを実行します。これには、代理店番号と予約の詳細が必要です。つまり、SBOOKテーブルとSTRAVELAGテーブルを使用する必要があります。SBOOKはS+BOOK(予約)、STRAVELAGはS+TRABEL(旅行)+AG(Agency=代理店)とお考えください。

まずは、代理店ごとの予約の総数を抽出します。これを達成するために、既存のテーブルSBOOKとSTRAVELAGから新しいテーブルSAGENCYDATAを作成することから始めます。以下のSQL文を実行します。

CREATE TABLE SAGENCYDATA as (select SBOOK.AGENCYNUM, count(SBOOK.AGENCYNUM) as NUMBOOKINGS FROM SBOOK, STRAVELAG WHERE SBOOK.AGENCYNUM=STRAVELAG.AGENCYNUM group by SBOOK.AGENCYNUM ORDER BY count(SBOOK.AGENCYNUM) desc)

スクリーンショット 2024-01-27 14.05.16.png
スクリーンショット 2024-01-27 14.06.29.png

以下のSQL文で作成したテーブルSAGENCYDATAの中身を表示させます。

SELECT * FROM SAGENCYDATA;

スクリーンショット 2024-01-27 14.08.05.png
スクリーンショット 2024-01-27 14.10.38.png

STRAVELAGテーブルとSAGENCYDATAテーブルをAGENCYNUM列に基づいて結合し、結果からトップ5の代理店を抽出します。これにより、トップ5の代理店の代理店番号、名前、予約数のリストが得られます。以下のSQL文を実行します。

SELECT TOP 5 SAGENCYDATA.AGENCYNUM, STRAVELAG.NAME,SAGENCYDATA.NUMBOOKINGS FROM SAGENCYDATA INNER JOIN STRAVELAG on SAGENCYDATA.AGENCYNUM = STRAVELAG.AGENCYNUM;

スクリーンショット 2024-01-27 14.13.27.png

結果パネルでは、最も多くの予約を行っている旅行代理店が「Rainy, Stormy, Cloudy」で、合計27870件の予約があることがわかります。
スクリーンショット 2024-01-27 14.13.39.png

アレックスは、トップ5の旅行代理店が最も予約を取る曜日も知りたいと考えているため、さらにいくつかのクエリを使用する必要があります。
トップの予約日を見つけるために、まず2つの新しいテーブルを作成します:
STOPAGENCY:トップ5の代理店による予約の名前、代理店番号、および数
SAGBOOKDAYS:各代理店ごとに1日に行われる予約の詳細
STOPAGENCYはS+TOP(トップ)+AGENCY(代理店)、SAGBOOKDAYSはS+BOOK(予約)+DAYS(日)とお考えください。

まず、以前のクエリの結果を新しいテーブルに保存することによって、STOPAGENCYテーブルを作成します。以下のSQL文を実行します。

CREATE TABLE STOPAGENCY AS (SELECT TOP 5 SAGENCYDATA.AGENCYNUM, STRAVELAG.NAME,SAGENCYDATA.NUMBOOKINGS FROM SAGENCYDATA INNER JOIN STRAVELAG ON SAGENCYDATA.AGENCYNUM = STRAVELAG.AGENCYNUM);

スクリーンショット 2024-01-27 14.23.22.png
スクリーンショット 2024-01-27 14.23.49.png

以下のSQL文でSTOPAGENCYの中身を確認します。

SELECT * FROM STOPAGENCY;

スクリーンショット 2024-01-27 14.25.09.png
スクリーンショット 2024-01-27 14.25.18.png

次に、各代理店の日々の予約を保存するためにSAGBOOKDAYSテーブルを作成します。以下のSQL文を実行します。

CREATE TABLE SAGBOOKDAYS AS (SELECT AGENCYNUM, dayname(ORDER_DATE) as ORDERDAY, count(dayname(ORDER_DATE)) AS DAYCOUNT FROM SBOOK GROUP BY AGENCYNUM, dayname(ORDER_DATE))

スクリーンショット 2024-01-27 14.28.00.png
スクリーンショット 2024-01-27 14.28.09.png

以下のSQL文でSAGBOOKDAYSの中身を確認します。

SELECT * FROM SAGBOOKDAYS;

スクリーンショット 2024-01-27 14.30.01.png
スクリーンショット 2024-01-27 14.30.13.png

2つのテーブルを作成したので、これらのテーブルを代理店番号(AGENCYNUM列)に基づいて結合します。また、トップ5の代理店のそれぞれについて、予約数が最も多い日を抽出する必要があります。以下のSQL文を実行します。

SELECT SAGBOOKDAYS.AGENCYNUM, STOPAGENCY.NAME, SAGBOOKDAYS.ORDERDAY, SAGBOOKDAYS.DAYCOUNT FROM SAGBOOKDAYS INNER JOIN STOPAGENCY ON SAGBOOKDAYS.AGENCYNUM=STOPAGENCY.AGENCYNUM WHERE SAGBOOKDAYS.DAYCOUNT IN (SELECT max(DAYCOUNT) FROM SAGBOOKDAYS GROUP BY AGENCYNUM)

スクリーンショット 2024-01-27 14.31.33.png

これで、トップ5の代理店における予約の大部分が木曜日に行われていることがわかります。
スクリーンショット 2024-01-27 14.31.43.png

以上になります。お疲れ様でした!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?