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

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

https://qiita.com/IT_Tech_Firm/items/d6a09b6a15aae9c07ead

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

https://developers.sap.com/tutorials/hana-cloud-mission-trial-7.html

まず最初に"Open in SAP HANA Database Explorer"を開きます。
![スクリーンショット 2024-01-27 13.37.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/69bc641b-10d7-7e83-4b04-6874afb4a5a4.png)

画面左上の”Open the SQL Console”をクリックしてSQLコンソールを開きます。キーボードのショートカットでも開くことができます（WindowsはCtrl+Alt+C、MacはCommand+Option+C）。
![スクリーンショット 2024-01-27 13.39.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/1de7a8f9-bd8f-85c0-3a82-86d32d54cfed.png)

SQLコンソールが開きます。（私は何回か開き直したためコンソールの番号が4になっていますが、通常は1から開きます。）
![スクリーンショット 2024-01-27 13.45.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/ad2e0d81-6085-923c-42c6-dde806e7afc9.png)

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

以下のクエリを実行して、スキーマを`SFLIGHT`にします。
```
SET SCHEMA SFLIGHT;
```
![スクリーンショット 2024-01-27 13.49.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/e9da7f3a-5f41-ba46-d5ea-22c102330b7a.png)

実行ボタンを押します。
![スクリーンショット 2024-01-27 13.51.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/4d8dd994-f74f-5732-67aa-feaef658fc16.png)

SQLコンソール右上のスキーマから`DBADMIN`から`SFLIGHT`に変わります。
![スクリーンショット 2024-01-27 13.52.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/dc4e301e-a3bc-5062-bba2-e4919d441d05.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/58c996e9-df08-7f56-9688-928f575c9302.png)
![スクリーンショット 2024-01-27 14.06.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/03c2b5ac-2641-afff-b806-a6665afb64e7.png)

以下のSQL文で作成したテーブル`SAGENCYDATA`の中身を表示させます。
```
SELECT * FROM SAGENCYDATA;
```
![スクリーンショット 2024-01-27 14.08.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/4d02a545-accd-72d6-5b32-c8e28f3cbb02.png)
![スクリーンショット 2024-01-27 14.10.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/16e64bd7-4da6-6a5f-f91e-886960f55513.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/c0eefacd-f3d7-7fa1-0f06-411669dfa78d.png)

結果パネルでは、最も多くの予約を行っている旅行代理店が「Rainy, Stormy, Cloudy」で、合計27870件の予約があることがわかります。
![スクリーンショット 2024-01-27 14.13.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/2fc13ac2-742f-fde2-7e28-094c57b94229.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/47043e45-d6c4-4c98-9325-11d035c224ee.png)
![スクリーンショット 2024-01-27 14.23.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/c7054f80-ab32-bf1f-3645-82f0e855750e.png)

以下のSQL文で`STOPAGENCY`の中身を確認します。
```
SELECT * FROM STOPAGENCY;
```
![スクリーンショット 2024-01-27 14.25.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/1801d2be-457f-0573-c3d2-1a6093c1d6e6.png)
![スクリーンショット 2024-01-27 14.25.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/8434e859-a20e-de94-e736-a1879e1b51c6.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/8a24e4fa-e342-aebc-269d-03338d79bc5e.png)
![スクリーンショット 2024-01-27 14.28.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/7cb74489-0227-cec7-bdda-c923873d2ec7.png)

以下のSQL文で`SAGBOOKDAYS`の中身を確認します。
```
SELECT * FROM SAGBOOKDAYS;
```
![スクリーンショット 2024-01-27 14.30.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/df30a78b-e6c2-a5bb-030d-7afb8f4ded24.png)
![スクリーンショット 2024-01-27 14.30.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/018930e9-2be6-ccad-cdcb-b85cde76ae5a.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/77ef0e3d-cb33-1d74-92b2-99beef263b16.png)

これで、トップ5の代理店における予約の大部分が木曜日に行われていることがわかります。
![スクリーンショット 2024-01-27 14.31.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1181562/52871aee-11da-6f1f-5c1a-1618e1d78754.png)

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