MySQL で行を列に変換したり、列を行に変換したりする詳細な例

MySQL で行を列に変換したり、列を行に変換したりする詳細な例

mysql 行から列へ、列から行へ

難しい文章ではないので、詳しく説明はしません。文章を読むときは、一文ずつ内側から外側へと分析してください。

行から列へ

図に示すようなテーブルがあります。ここで、クエリ結果の行を列に変換します。

1

テーブル作成ステートメントは次のとおりです。

テーブル `TEST_TB_GRADE` を作成します (
 `ID` int(10) NOT NULL AUTO_INCREMENT,
 `USER_NAME` varchar(20) デフォルト NULL,
 `COURSE` varchar(20) デフォルト NULL,
 `SCORE` float デフォルト '0'、
 主キー (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 デフォルト CHARSET=utf8;
TEST_TB_GRADE(USER_NAME, COURSE, SCORE)の値に挿入
(「張三」『数学』34)
(「張三」、「中国人」、58)、
(「張三」、「英語」、58)、
(『李斯』『数学』45)
(「李斯」、「中国人」、87)、
(「李斯」、「英語」、45)、
(「王武」『数学』76)
(「王武」、「中国人」、34)、
(「王武」、「英語」、89)

クエリステートメント:

ここでMAXが使用される理由は、NULLを防ぐためにデータのないポイントを0に設定するためです。

ユーザー名を選択、
  MAX(CASE コース WHEN '数学' THEN スコア ELSE 0 END ) 数学、
  MAX(CASE コース WHEN '中国語' THEN スコア ELSE 0 END) 中国語、
  MAX(CASE コース WHEN '英語' THEN スコア ELSE 0 END ) 英語 FROM test_tb_grade
USER_NAME でグループ化します。

結果:

2

列から行へ

図のようなテーブルがあります。クエリ結果が行にリストされることを期待します。

3

テーブル作成ステートメントは次のとおりです。

テーブル `TEST_TB_GRADE2` を作成します (
 `ID` int(10) NOT NULL AUTO_INCREMENT,
 `USER_NAME` varchar(20) デフォルト NULL,
 `CN_SCORE` float デフォルト NULL、
 `MATH_SCORE` float デフォルト NULL、
 `EN_SCORE` float デフォルト '0'、
 主キー (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 デフォルト CHARSET=utf8;
TEST_TB_GRADE2(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) の値を挿入する
(「張三」、34、58、58)、
(「李斯」、45、87、45)、
(「王武」76、34、89);

クエリステートメント:

test_tb_grade2 から user_name、'Language' COURSE、CN_SCORE を SCORE として選択します。
unit select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2
結合により、test_tb_grade2 から user_name、'English' COURSE、EN_SCORE を SCORE として選択します。
ユーザー名、コースで並べ替えます。

結果:

4

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

以下もご興味があるかもしれません:
  • SQLの行から列、列から行へのシンプルな実装
  • SQL 行から列、列から行へのコードの説明
  • mssqlデータベースで行を列に、列を行に変換するための究極のソリューション
  • SQL 行から列へ、列から行へ

<<:  JavaScript タイピングゲーム

>>:  Linux 占有ポートの強制解放と Linux ファイアウォールのポート開放方法の詳しい説明

推薦する

Nginx 構成検出サービスのステータスを実装する方法

1. チェックステータスモジュールがインストールされているかどうかを確認します。 [root@loc...

ウェブサイトのハイパーリンクを開く方法に関する議論

新しいウィンドウが開きます。 利点: ユーザーがリンクをクリックしても、現在閲覧しているコンテンツは...

便利でシンプルなMySQL関数10個

関数0. 現在の時刻を表示するコマンド: select now()。機能: 現在の時刻を表示します。...

MySQLのINサブクエリによってインデックスが使用できなくなる問題を解決する

今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...

Linux のハードリンクとソフトリンクの区別

Linux には、2 種類のファイル接続があります。1 つは Windows のショートカットに似て...

Vue の nextTick について話す

データが変更されても、DOM ビューはすぐには更新されません。変更直後にノードまたはその値を取得しよ...

nginxとlvsのメリットとデメリット、そして適切な使用環境

まず最初に、ロード バランシングとは何かについて説明します。ロード バランシングとは、リクエストの内...

Nginx ベースの Mencached キャッシュ構成の詳細な説明

導入Memcached は分散キャッシュ システムです。Memcached には認証とセキュリティ制...

jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

目次animate() アニメーションメソッドアニメーションキューイングdelay() メソッドアニ...

LinuxでIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

Linux でバックグラウンド タスクを実行するために nohup と screen を使用する例と違いの簡単な分析

SSH ターミナル (putty、xshell など) を使用して Linux サーバーに接続し、時...

MySQLで日付と時刻を照会する方法

序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...

Docker Swarm を使用して分散クローラー クラスターを構築する例

クローラーの開発プロセス中に、クローラーを複数のサーバーに展開する必要がある状況に遭遇したことがある...

MAC で MySQL のデフォルトの文字セットを utf8 に変更する方法

1. デフォルトでインストールされているMySQLの文字セットを確認するmysql> '...

10 種類のモダンなレイアウトを実現するための CSS コード

序文日曜日に自宅で web.dev の 2020 3 日間ライブを視聴したところ、興味深い点がたくさ...