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 ファイアウォールのポート開放方法の詳しい説明

推薦する

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

Vue 3 カスタムディレクティブ開発の概要

指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...

JavaScript 関数のパフォーマンスを測定するさまざまな方法の比較

目次概要パフォーマンス.nowコンソール.time時間精度を短縮注意事項分割して征服する入力値に注意...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...

Reactコンポーネント通信の詳細な説明

目次コンポーネント通信の概要コンテンツ3つの方法まとめコンポーネントコミュニケーション - 父から息...

js における関数のネストとクロージャの詳細

目次1. 範囲2. 関数の戻り値3. 関数のネスト4. 終了5. クロージャの実用的応用1. 内部変...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...

自動同期テーブル構造のMySql開発

開発の問題点開発プロセスでは、データベース フィールドが頻繁に変更されるため、RD 環境と QA 環...

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

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

フロントエンド JavaScript におけるリフレクションとプロキシ

目次1. 反射とは何ですか? 2. JavaScriptで反映する2.1 Reflect.get(タ...

MySQL解凍版のインストール手順の詳しい説明

1. 公式サイトにアクセスします: D:\mysql-5.7.21-winx64\bin をダウンロ...

Linux ファイルを分割するための split コマンドの詳細な説明

いくつかの簡単な Linux コマンドを使用すると、ストレージまたは電子メールの添付ファイルのサイズ...

CSS3 オーバーフロープロパティの説明

1. オーバーフローOverflow はオーバーフロー(コンテナ)です。コンテンツがコンテナを越える...

友達やグループを見つけるためのJavaScriptのLayim

現在、layuiの関係者はlayim友達検索ページの構造とスタイルを提供していません。私は個人的に非...