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

推薦する

sbinディレクトリを生成せずにNginxをインストールするソリューション

エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...

アイデアコンパイラvueインデントエラー問題シナリオの分析

プロジェクトシナリオ: Vueプロジェクトを実行したらインデントエラーが出ました。ideaコンパイラ...

TypeScript ジェネリックパラメータのデフォルト型と新しい厳密なコンパイルオプション

目次概要コンポーネントクラスの型定義を作成するジェネリック型を使用してPropsとStateを定義す...

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

Centos7 で yum を使用して Ceph 分散ストレージをインストールするチュートリアル

目次序文yumソース、epelソースを設定するCephソースの設定Cephとそのコンポーネントをイン...

CSS3 フィルターを使用して PNG 画像の色を変更するサンプル コード

この方法は、CSS3のdrop-shadow filterを使用して、png画像の不透明部分に任意の...

Linux における SUID、SGID、SBIT の素晴らしい使い方の詳細な説明

序文Linux のファイル権限管理はとにかく素晴らしいです。SUID、SGID、SBIT の機能を確...

HTML マークアップ言語 - テーブルタグ

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

画像ボタン送信とフォーム繰り返し送信の問題に関する議論

多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...

MySQL での select、distinct、limit の使用

目次1. はじめに2. 選択2.1 単一列のクエリ2.2 複数の列のクエリ2.3 すべての列をクエリ...

Centos7でポートを開く方法

CentOS7 のデフォルトのファイアウォールは iptables ではなく、firewalle で...

Linux で特定の時間にコマンドを実行する方法

先日、rsync を使用して LAN 上の別のシステムに大きなファイルを転送していました。非常に大き...

Linux CentOS でスケジュールされたバックアップ タスクを設定する方法

実装準備 # ファイルパスをバックアップする必要があります: /opt/apollo/logs/ac...

VueはTeleportをベースにModalコンポーネントを実装します

目次1. テレポートについて知る2. テレポートの基本的な使い方3. 最初のステップの最適化4. 第...

Chrome デベロッパー ツールの詳細な紹介 - タイムライン

1. 概要ユーザーは、アクセスする Web アプリケーションがインタラクティブでスムーズに実行される...