今回の記事ではSQLのDISTINCTについて解説します。DISTINCTの様々な側面を理解し、データベース操作の幅を広げましょう。
DISTINCTとは?
SQLのDISTINCTは、何度も繰り返されるデータから、一つだけを取り出す便利な機能です。この機能は、データを整理したり、調べたりする際に非常に役立ちます。そして、基本的には、SELECT文と一緒に使います。使い方は以下の通りです。
SELECT DISTINCT 列名 FROM テーブル名;
≫まずは簡単30秒で無料お問い合わせから≪
DISTINCTの使い方は?
例えば、以下のようなデータが含まれる「customer」テーブルを見ていきます。
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
上記のテーブルを見てみると、「route」列には “ad1” と “ad2” の2種類の値が存在しますが、“ad1” は2行で重複して登場しています。このような場合に、DISTINCTが有効です。
-- 重複するデータを排除し、重複しないrouteの値のみを選択 SELECT DISTINCT route FROM customer;
このクエリを実行することで、重複した “ad1” が取り除かれます。
実行結果は以下のようになります。
route |
---|
ad1 |
ad2 |
このように、DINTINCTを用いることで、データの中から重複する要素を効率的に除外して、重複していない値の一覧を取得することができます。
複数の列でのDINTINCTの使用方法
DISTINCTは、複数の列に対しても使用することができます。この場合、指定した複数の列の組み合わせが、テーブル内で一度しか表示されないようになります。それでは、以下の「customer_2」テーブルを用いて具体的な例を見てみましょう。
name | route | saved_date | price |
---|---|---|---|
佐藤 | ad1 | 2023-04-01 17:29:31 | 2100 |
鈴木 | ad2 | 2023-04-05 13:10:45 | 3500 |
加藤 | ad1 | 2023-04-19 11:37:01 | 1300 |
田中 | ad1 | 2023-04-21 15:45:00 | 2100 |
この「customer_2」テーブルで「route」列と「price」列を見ると、4行目の “ad1” と “2100” の組み合わせが1行目と同じです。このため、DINTINCTを複数の列に適用するように、以下のSQLクエリを実行します。
-- routeとpriceの組み合わせで、同じ組み合わせを1つだけ取得する SELECT DISTINCT route, price FROM customer;
このクエリの結果、同じ route と price の組み合わせは1つだけ出力され、以下のようなテーブルが得られます。
route | price |
---|---|
ad1 | 2100 |
ad2 | 3500 |
ad1 | 1300 |
このように、複数の列でDINTINCTを用いることで、特定の列の組み合わせが1つだけ表示されるようにすることができます。
DISTINCTとGROUP BYの違いは?
GROUP BYも重複データを除外する機能があります。GROUP BYがDISTINCTと違う点は、グループ化したデータに対して集計操作を行うことができる、という部分にあります。GROUP BYの基本的な使い方や構文について学びたい方は、こちらの記事を参照してください。
DISTINCTとGROUP BYの違いを具体的に見る
それでは、先ほどの「customer_2」テーブルを例に、DISTINCTとGROUP BYの違いを見てみましょう。
GROUP BYは、指定した列の値が同じ行をグループ化し、その他の列に集約関数を適用することができます。
-- GROUP BYを使用して、routeとpriceが同じ行をグループ化し、各グループの行数をカウントする SELECT route, price, COUNT(name) AS row_count FROM customer GROUP BY route, price;
このクエリでは、route と price が同じ行をグループ化し、そのグループの行数(row_count)を表示します。実行結果は以下の通りです。
route | price | row_count |
---|---|---|
ad1 | 2100 | 2 |
ad2 | 3500 | 1 |
ad1 | 1300 | 1 |
このように、DISTINCTは単純に指定列の重複を取り除きますが、GROUP BYは列をグループ化し、集約関数を使用して追加の情報(ここでは各グループの行数)を得ることができます。
まとめ
本記事では、SQLのDISTINCTについて解説しました。DISTINCTの基本を理解して今後の分析に役立ててください。
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
▼SQL
SQLとは?初心者向けに基礎知識から具体例まで分かりやすく解説
▼MySQL
【初心者向け】MySQLとは?SQLとの違いやメリット、使用方法をわかりやすく解説
▼WHERE
【SQL入門1】WHEREで検索条件を指定する方法を解説
▼IN
【SQL入門】IN句の使い方やサブクエリの活用方法を解説
▼CASE
5分でわかるSQLの条件分岐処理「CASE式」の使い方【完全版】
▼LIKE
【SQL】データの曖昧検索「LIKE句」の使い方!完全一致・部分一致・否定形も解説
▼BETWEEN
【SQL入門3】between演算子で抽出する範囲を指定する
▼EXISTS
【SQL】EXISTSの使い方をサンプルコードで解説
▼COUNT
【SQL】COUNT関数でレコード数をカウント!意味と使い方を解説
▼GROUP BY
【SQL】GROUP BY句を5分で習得!集計関数ごとの使い方を解説
▼ORDER BY
【SQL入門】ORDER BY句の使い方、複数条件の並び替えについて解説
▼JOIN
【SQL入門】JOINでテーブル結合!種類と使い方を解説
▼DELETE
【SQL】データ削除「DELETE文」の使い方。全件削除・複数テーブル参照も解説
▼HAVING
【SQL】HAVINGの使い方とWHEREとの違いを解説
▼INSERT
【SQL】INSERT文を使ってデータを追加する方法を解説
- 2023.09.29
- Other
Author:鷺坂りな @TechMania編集部 投稿一覧
Otherカテゴリの最新記事
-
- 2024.12.02
【VBA入門】If文を使いこなそう!条件分岐の基礎から応用まで解説
-
- 2024.12.02
【VBA】Excelシートの最終行を取得する
-
- 2024.11.29
【VBA入門】Dictionaryオブジェクト(連想配列)の使い方を解説
-
- 2024.11.29
【VBA】エラー「型が一致しません」の原因・対処法を詳しく解説
-
- 2024.11.22
【VBA】Trim関数で空白文字を削除する
-
- 2024.11.22
【VBA入門】配列まとめ(宣言・初期化、反復処理、コピー、結合)