MySQLのSELECT文でDISTINCT句を使って列の一意な値だけを取得する方法
MySQLのテーブルからデータを取得する際、特定の列に重複した値が含まれることがあります。このような場合、SELECT文にDISTINCT句を使用することで、結果セットから重複データを除外し、一意の値のみを抽出できます。
DISTINCT句の基本構文
SELECT DISTINCT Columns FROM Table_name WHERE conditions;
列名の直前にDISTINCTキーワードを指定するだけで、その列の重複する値が自動的に排除され、ユニークな値だけが返されます。必要に応じてWHERE句と組み合わせて条件を絞り込むことも可能です。
実行例:tenderテーブルの場合
ここでは、以下のような構造を持つ「tender」というテーブルを例に説明します。
mysql> Select * from tender; +----------+--------------+--------------+-------+ | clientid | client_Fname | Client_Lname | value | +----------+--------------+--------------+-------+ | 100 | Mohan | Kumar | 60000 | | 101 | Sohan | Singh | 50000 | | 101 | Somil | Rattan | 55000 | | 103 | Gaurav | Kumar | 75000 | | 103 | Rahul | Singh | 63000 | +----------+--------------+--------------+-------+ 5 rows in set (0.00 sec)
このテーブルを見ると、「client_Lname」列には「Kumar」や「Singh」など同じ姓が複数回登場しています。そこで、この列の一意な値だけを取得してみましょう。
client_Lname列の一意な値を取得するクエリ
mysql> Select DISTINCT client_Lname from tender; +--------------+ | client_Lname | +--------------+ | Kumar | | Singh | | Rattan | +--------------+ 3 rows in set (0.05 sec)
元のテーブルでは5件のレコードが存在しましたが、DISTINCTを使用することで、重複が除外された3件の一意な姓だけが返されました。
client_Fname列の一意な値を取得するクエリ
同様に、名前(client_Fname)列に対しても同じクエリを実行できます。
mysql> Select DISTINCT client_Fname from tender; +--------------+ | client_Fname | +--------------+ | Mohan | | Sohan | | Somil | | Gaurav | | Rahul | +--------------+ 5 rows in set (0.00 sec)
この場合、すべての名前が異なるため、5件すべてがそのまま返されています。
まとめ
SELECT DISTINCTは、MySQLで重複データを簡単に排除できる便利な句です。顧客リストからユニークな氏名を抽出したり、カテゴリの一覧を取得したりするなど、データ分析やレポート作成の場面で幅広く活用できます。なお、複数の列を指定した場合は、それらの列の組み合わせ全体が一意である行だけが返される点にも注意してください。
-
MySQLで特定の3つの値しか格納できないカラムを持つテーブルを作成する方法
MySQLで、あらかじめ決められた3つの値だけを格納できるカラムを持つテーブルを作成したい場合は、ENUMデータ型を使用します。ENUM型を使うと、指定した候補値以外のデータが挿入されるのを防ぐことができます。テーブルの作成まず、ENUM型のカラムを持つテーブルを作成しましょう。ここでは例として、「RED」「GREEN」「BLUE」の3色のみを許可するColorカラムを定義します。mysql> create table DemoTable838(Color ENUM(RED,GREEN,BLUE)); Query OK, 0 rows affected (0.67 sec)これで、Col
-
MySQLデータベースの列から一意(ユニーク)なレコード数をカウントする方法
MySQLである列に含まれる重複しない(一意の)レコード数を集計したい場合は、集計関数 COUNT(DISTINCT ...) を GROUP BY 句と組み合わせて使用します。これにより、ユーザーごとの投稿メッセージ数のように、グループ単位での一意レコード数を簡単に取得できます。実際にサンプルを使って確認してみましょう。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( UserName varchar(100), UserPostMessage text ); Query OK,