サポートタイムズ

サポートタイムズはカスタマーサポートの“今”を届けるメディアです。(Powered by CallConnect)

カスタマーサポートの未来を考えよう!

Powerd by CallConnect
Twitter Facebook

サポート担当者のための SQL 入門

f:id:sennba3:20180206155157g:plain

サポート担当者のスキルの一つとして、いま SQL が注目されています。そこで本記事では、サポート担当者が知っておきたい SQL の概要と基礎について解説します。

SQL の概要

SQL(Structured Query Language)はデータベース管理システム において、データの操作や定義を行うための言語のことを指します。

サポートをやっていて、以下のようなケースに遭遇したことはないでしょうか?

  • 問い合わせを頂いたお客さんのデータを欲しいが、管理ツール外の情報は毎回エンジニアの方にお願いしなければならない。
  • マーケティングやカスタマーサクセスのために、顧客の属性や傾向を数値として集計したい。

大抵の場合、自社で管理ツールと呼ばれる専用アクセスの Webページがあり、そこでサポート担当者は顧客の情報などを確認します。しかし、顧客のデータは多種多様で、サービス自体も進化していく中で自社管理ツールをそれに追従させていくためにはエンジニアの手間がかかり、どんどん複雑になっていってしまいます。

しかし、サポート担当者が SQL を身につけると、自分の好きなデータを好きなようにとってくることができます。例えば「このお客さんの過去1日の利用履歴を調べたい」「このお客さんの契約情報を一部更新したい」といったことが SQL を書けば簡単に実現できてしまいます。

また、カスタマーサポートの業界では、1つの会社に勤め続けていても "そのサービスのことしかわからない" といったことが起こり得ます。そして、技術の評価が外部からみると難しいため、転職時などにおけるキャリアパスの課題が存在しています。しかしながら、 SQL は現在、 Web サービスのほとんどで利用されており、 SQL を身につければ、他のサービスを扱う際にも活用でき、サポート担当としての技能を持っていることをはっきりとアピールすることができるのです。

リレーショナルデータベースの概念

SQL は、データをアクセスするための言語ですが、そのデータそのものを保存している場所が「データベース」となります。その中でも SQL は「リレーショナルデータベース」という種類に特化したデータアクセスのためのプログラム言語であります。

リレーショナルデータベースを簡単に表現するのであれば、一種のエクセルの表みたいなものと考えても良いでしょう。1行のデータを「レコード」と呼び、縦の属性を「カラム」と呼びます。例えば以下のように Users テーブルにデータが入っているような形となります。

f:id:cevid_cpp:20180205165320p:plain

さて、リレーショナルとは「関係」を意味しますが、なぜリレーショナルなのでしょうか。それはテーブルとテーブルを id を通じて紐付けすることができる(結合と呼ぶ)からです。以下の図をご覧ください。

f:id:cevid_cpp:20180205170504p:plain

例えば name が omata の Topics は何かを調べたいとします。その際、Users テーブルの id が 2の Topics テーブルを調べることになります。そうすると、Topics テーブルでは緑背景のものが user_id が 2 のため、 omata の Topics だと判別が可能です。つまり、"CS担当者が知りたいデータ分析" と "熱狂的なファンを作る3つの秘訣" という欲しいデータを取って来ることができるようになります。

同じように、name が homma の Topics は何でしょう?この場合、user_id が 1 の Topics を調べることになりますが、Topics テーブルには該当する項目がありません。よって該当する Topics データは無しということがわかります。

これを ER図と呼ばれる設計図で表現すると、以下のようになります。

f:id:cevid_cpp:20180205170834p:plain

Topics が 0..* とあります。これで Users と Topics は1対多の関係である と言います。これは、"User に対応する Topics は 0から複数個出て来る場合があります" ということを表現しています。

SQL を書いてみよう

お待たせしました、それでは SQL プログラミングを始めましょう!本記事では、SQL Tryit Editor を使って解説していきます。 SQL Tryit Editor v1.5

今回の SQL Tryit Editor の ER図 は以下の通りとなっております。他にもデータがありますが、説明のため一部省略しています。

f:id:cevid_cpp:20180205172015p:plain

このデータのうち、まずは "Customers" テーブルのみをご覧ください。早速、Customers のデータを読み込んでみましょう。最もシンプルな SQL は以下の通りです。

SELECT *
FROM Customers;

これだけで、Customers テーブルに保存された全てのデータを列挙することができます。そしてさらに、以下のような SQL 構文で、データを自分たちが見やすい形にしていくことができるようになります。

SELECT カラム名
FROM テーブル名
WHERE 絞り込み条件
ORDER BY 並び項目
LIMIT 絞り込み件数;

SELECT と FROM のみが必須です。他は任意となります。例えば、「City が London であるデータを CustomerName の名前順で5件表示したい。表示するカラムは CustomerID, CustomerName, City」となれば以下のような SQL となります。

SELECT CustomerID, CustomerName, City
FROM Customers
WHERE City = 'London'
ORDER BY CustomerName
LIMIT 10;

ぜひ上記の SQL をコピー&ペーストして確認してみてください。求める結果になりましたでしょうか?

SQL の基礎としての残りは、条件のバリエーションを覚えていくだけです。例えば "金額が1,000円以上のもののみ" とか、 "作成日時の新しい順から表示" といった時に WHERE や ORDER BY にどんな値を入れればいいのかを知れば良いだけとなります。

SQL の応用

さて前節で説明した、「結合」についても簡単にご紹介しましょう。ここから先は基礎編を終えた後に学ぶ応用編となりますので、最初は "こんなことができるんだ" 程度にお読みいただけますと幸いです。

テーブルを結合することで、他のテーブルの条件をもとに、欲しいデータを絞り込んだり集計したりすることができるようになります。先ほどの WHEREORDER BY などと組み合わせて、さらに以下のような構文を書くことができます。

SELECT カラム名
FROM テーブル名
JOIN テーブル名 ON 結合条件
GROUP BY カラム名 
HAVING 絞り込み条件 ;

これを使って、例えば「カテゴリ毎の商品の平均金額が高い Top 5 のカテゴリと平均金額を表示」 したい場合、以下のような SQL となります。

SELECT Categories.CategoryName, AVG(Products.Price)
FROM Products 
JOIN Categories ON Products.CategoryID = Categories.CategoryID
GROUP BY Categories.CategoryID
ORDER BY AVG(Products.Price) DESC
LIMIT 5;

途端に複雑になってしまいましたが、ひとまずこれをコピー&ペーストして確認してみてください。確かに Top5 の金額が表示されたかと思います。このように、データ全体での傾向や分析にも SQL を活用することができます。こうした技能を身につければ、もはやエンジニア以上の SQL を持ったサポート担当者の方が出てきてもおかしくはないです。ぜひ興味を持った方は集計の方にもチャレンジしてみてください。

終わりに

本節ではサポート担当者がまず最初に習得したいプログラミング言語 "SQL" について解説しました。本記事をスタート地点としてぜひ勉強を始めてみてください。

エンジニアとサポート担当者それぞれが SQL を適切に扱えるようになれば、より良いサポートが実現できるはずです。

本記事は サポート勉強会 での発表内容を元に記事化したものです。