MySQLでJOINを使用して相互関係のある行をカウントするクエリの書き方
MySQLで、ある値が2つの列に相互関係を持って存在する行(例えば「90」がValue1とValue2の両方に関わる行)をカウントしたい場合、集計関数 COUNT(*) と自己結合(JOIN)を組み合わせることで実現できます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable1543
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (1.36 sec)レコードの挿入
次に、INSERT文を使ってテーブルにデータを登録します。
mysql> insert into DemoTable1543 values(57,60); Query OK, 1 row affected (0.52 sec) mysql> insert into DemoTable1543 values(60,68); Query OK, 1 row affected (0.38 sec) mysql> insert into DemoTable1543 values(90,98); Query OK, 1 row affected (0.36 sec) mysql> insert into DemoTable1543 values(98,90); Query OK, 1 row affected (0.20 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1543;
実行結果は以下の通りです。
+--------+--------+ | Value1 | Value2 | +--------+--------+ | 57 | 60 | | 60 | 68 | | 90 | 98 | | 98 | 90 | +--------+--------+ 4 rows in set (0.00 sec)
相互関係のある行をカウントするクエリ
ここからが本題です。同じテーブルに対して別名(tbl1、tbl2)を付けて自己結合を行い、「tbl1.Value2 = tbl2.Value1」という条件で関連付けます。さらにWHERE句で「tbl1.Value1 = 90」かつ「tbl2.Value2 = 90」と指定することで、数値90が両列にまたがって相互関係を持つ行だけを抽出し、その件数をカウントします。
mysql> select count(*) from DemoTable1543 tbl1
-> join DemoTable1543 tbl2
-> on tbl1.Value2=tbl2.Value1
-> where tbl1.Value1=90 and tbl2.Value2=90;実行結果は以下の通りです。
+----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec)
クエリのポイント
- 自己結合(SELF JOIN):同一テーブルに異なる別名を付けることで、あたかも2つのテーブルがあるかのように扱えます。
- 結合条件:「tbl1.Value2 = tbl2.Value1」により、片方の行のValue2がもう片方の行のValue1と一致する組み合わせのみを取得します。
- 絞り込み条件:WHERE句で両端の値を指定することで、目的の相互関係(この例では90)を持つペアだけに限定できます。
この手法は、グラフ構造のエッジ(辺)の有向ペアを検索したり、双方向の参照関係を持つデータを検証したりする際にも応用できる便利なパターンです。
-
MySQLクエリでCASE条件を使ってカウントする方法
MySQLでは、CASE WHENを活用し、COUNT()関数の中にCASE条件を設定することで、特定の条件に一致するレコードだけを数えることができます。この仕組みが成り立つのは、COUNT()関数がNULL値を無視するためです。条件に合わない場合にNULLを返すことで、そのレコードはカウント対象から除外されます。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。 ); Query OK, 0 rows affected (0.61 sec)2. レコードの挿入続いて、insertコマンドを使ってテーブルにデータを登録します。mysql> insert into D
-
ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本
ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに