MySQLで負の値を含むヒストグラムを表示する方法
MySQLで負の値を含むヒストグラムを表示する方法
MySQLでヒストグラム(簡易棒グラフ)を表示する際、負の値も含めて視覚化したい場合は、REVERSE()関数とCONCAT()関数を組み合わせるのがポイントです。負の値に対してREVERSE()を使うことで、アスタリスク(*)によるバーを左向きに表示できます。ここでは、実際にサンプルテーブルを作成しながら手順を解説します。
1. サンプルテーブルの作成
まず、ヒストグラム用のテーブルを作成しましょう。
mysql> create table DemoTable632 (
histogramId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
histogramValue int,
histogramImage text
);
Query OK, 0 rows affected (0.78 sec)
2. レコードの挿入
次に、INSERT文で正の値と負の値のレコードを挿入します。
mysql> insert into DemoTable632(histogramValue) values(2);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable632(histogramValue) values(3);
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable632(histogramValue) values(-6);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable632(histogramValue) values(-5);
Query OK, 1 row affected (0.13 sec)
3. テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable632;
実行結果は次の通りです。現時点ではhistogramImage列はまだNULLになっています。
+-------------+----------------+----------------+
| histogramId | histogramValue | histogramImage |
+-------------+----------------+----------------+
| 1 | 2 | NULL |
| 2 | 3 | NULL |
| 3 | -6 | NULL |
| 4 | -5 | NULL |
+-------------+----------------+----------------+
4 rows in set (0.00 sec)
4. 負の値に対応したヒストグラムを生成するクエリ
ここからが本題です。以下のクエリでは、IF()で値が負かどうかを判定し、負の値の場合はREVERSE()とRPAD()を組み合わせてバーを左側に、正の値の場合はREPEAT()でそのまま右側にアスタリスクを並べています。
mysql> SELECT histogramId, histogramValue, CONCAT(
REVERSE(RPAD(REPEAT('*', IF(histogramValue<0,-histogramValue,0)), 100, ' ')),
REPEAT('*',IF(histogramValue<0,0,histogramValue))
)
AS histogramImage FROM DemoTable632 ORDER BY histogramId;
クエリの仕組み
- 負の値の場合:
-histogramValueで絶対値を求め、その回数だけ「*」を繰り返します。RPAD(..., 100, ' ')で文字列全体を100文字幅に空白埋めし、REVERSE()で反転することで、バーが左向きに配置されます。 - 正の値の場合:
REPEAT()によって値の数だけ「*」を右方向へそのまま並べて表示します。
実行結果は次の通りです。
+-------------+----------------+----------------+
| histogramId | histogramValue | histogramImage |
+-------------+----------------+----------------+
| 1 | 2 | ** |
| 2 | 3 | *** |
| 3 | -6 | ****** |
| 4 | -5 | ***** |
+-------------+----------------+----------------+
4 rows in set (0.00 sec)
このように、値の大きさに応じたアスタリスクのバーが自動的に生成され、正と負のデータをひと目で比較できるヒストグラムを作成できます。数値データの分布をSQLだけで手軽に視覚化したい場合に、ぜひ活用してみてください。
-
PHPとMySQLでブール値を扱うには?BOOL・BOOLEAN・TINYINT(1)の違いと使い方
本記事では、MySQL 8.0.12を使用して、ブール(Boolean)値の正しい取り扱い方を解説します。まず、使用しているMySQLのバージョンを確認しておきましょう。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec) MySQLにおけるブール値の基本:BOOL・BOOLEAN・TINYINT(1) MySQLでブール値を扱うには、BOOL、BOOLEAN、またはTINYINT(1)のいずれかを使用
-
Javaを使用してMySQLテーブルの値を表示する方法
MySQLデータベースのテーブル値をJavaで表示するには、ResultSetの概念を利用します。データベースへの接続には、MySQL JDBCドライバーを使用します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo87 -> ( -> name varchar(20), -> age int -> )