欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL實現(xiàn)列轉(zhuǎn)行與行轉(zhuǎn)列的操作代碼

 更新時間:2024年09月25日 09:14:27   作者:codeMonkey_gxy  
在處理數(shù)據(jù)時,我們常常會遇到需要將表中的列(字段)轉(zhuǎn)換為行,或?qū)⑿修D(zhuǎn)換為列的情況,這種操作通常被稱為“列轉(zhuǎn)行”(Pivoting)和“行轉(zhuǎn)列”(Unpivoting),本文將向您介紹如何使用 CASE 語句、聚合函數(shù)以及 GROUP BY 子句來完成列轉(zhuǎn)行和行轉(zhuǎn)列的操作

引言

在處理數(shù)據(jù)時,我們常常會遇到需要將表中的列(字段)轉(zhuǎn)換為行,或?qū)⑿修D(zhuǎn)換為列的情況。這種操作通常被稱為“列轉(zhuǎn)行”(Pivoting)和“行轉(zhuǎn)列”(Unpivoting)。在 MySQL 中,雖然沒有直接提供 PIVOT 和 UNPIVOT 這樣的關(guān)鍵字,但我們可以使用其他方法來實現(xiàn)這些功能。本文將向您介紹如何使用 CASE 語句、聚合函數(shù)以及 GROUP BY 子句來完成列轉(zhuǎn)行和行轉(zhuǎn)列的操作。

列轉(zhuǎn)行(Pivoting)

列轉(zhuǎn)行是指將表格中的一列或多列的值轉(zhuǎn)換成新的列標(biāo)題,并且將對應(yīng)的數(shù)據(jù)填充到這些新列中。下面通過一個例子來說明這個過程。

示例數(shù)據(jù)

假設(shè)有一個成績表 scores,包含學(xué)生的姓名 name、科目 subject 和分?jǐn)?shù) score

CREATE TABLE scores (
    name VARCHAR(50),
    subject VARCHAR(20),
    score INT
);

INSERT INTO scores (name, subject, score) VALUES
('Alice', 'Math', 95),
('Alice', 'English', 88),
('Bob', 'Math', 76),
('Bob', 'English', 92);

轉(zhuǎn)換前查詢結(jié)果

SELECT * FROM scores;
+-------+---------+-------+
| name  | subject | score |
+-------+---------+-------+
| Alice | Math    |    95 |
| Alice | English |    88 |
| Bob   | Math    |    76 |
| Bob   | English |    92 |
+-------+---------+-------+

列轉(zhuǎn)行 SQL 語句

我們需要將 subject 列的不同值變?yōu)樾碌牧忻?,并把對?yīng)的 score 填充進(jìn)去。

SELECT
    name,
    MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END) AS Math,
    MAX(CASE WHEN subject = 'English' THEN score ELSE NULL END) AS English
FROM
    scores
GROUP BY
    name;

轉(zhuǎn)換后查詢結(jié)果

+-------+------+---------+
| name  | Math | English |
+-------+------+---------+
| Alice |   95 |      88 |
| Bob   |   76 |      92 |
+-------+------+---------+

行轉(zhuǎn)列(Unpivoting)

行轉(zhuǎn)列是列轉(zhuǎn)行的逆過程,即將多個列的數(shù)據(jù)轉(zhuǎn)換成一行多條記錄的形式。這可以通過 UNION ALL 來實現(xiàn)。

示例數(shù)據(jù)

假設(shè)現(xiàn)在有另一個表 students,它已經(jīng)以列轉(zhuǎn)行后的形式存儲了學(xué)生的信息:

CREATE TABLE students (
    name VARCHAR(50),
    Math INT,
    English INT
);

INSERT INTO students (name, Math, English) VALUES
('Alice', 95, 88),
('Bob', 76, 92);

轉(zhuǎn)換前查詢結(jié)果

SELECT * FROM students;
+-------+------+---------+
| name  | Math | English |
+-------+------+---------+
| Alice |   95 |      88 |
| Bob   |   76 |      92 |
+-------+------+---------+

行轉(zhuǎn)列 SQL 語句

我們將每個科目的成績都變成單獨的一行記錄。

SELECT
    name,
    'Math' AS subject,
    Math AS score
FROM
    students
UNION ALL
SELECT
    name,
    'English' AS subject,
    English AS score
FROM
    students;

轉(zhuǎn)換后查詢結(jié)果

+-------+---------+-------+
| name  | subject | score |
+-------+---------+-------+
| Alice | Math    |    95 |
| Bob   | Math    |    76 |
| Alice | English |    88 |
| Bob   | English |    92 |
+-------+---------+-------+

通過以上示例,我們可以看到如何在 MySQL 中靈活地進(jìn)行列轉(zhuǎn)行和行轉(zhuǎn)列的數(shù)據(jù)轉(zhuǎn)換。希望這些技巧能夠幫助您更好地管理和分析數(shù)據(jù)庫中的數(shù)據(jù)。

到此這篇關(guān)于MySQL實現(xiàn)列轉(zhuǎn)行與行轉(zhuǎn)列的操作代碼的文章就介紹到這了,更多相關(guān)MySQL列轉(zhuǎn)行與行轉(zhuǎn)列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 故障的機(jī)器修好后重啟,狂拉主庫binlog,導(dǎo)致網(wǎng)絡(luò)問題的解決方法

    故障的機(jī)器修好后重啟,狂拉主庫binlog,導(dǎo)致網(wǎng)絡(luò)問題的解決方法

    本文主要記錄一次簡單的、典型的故障,發(fā)生問題的原因很簡單,這個問題發(fā)生也很簡單,各位同學(xué)一定要注意,一不留神就會對主庫造成影響
    2016-04-04
  • mysql 數(shù)據(jù)庫備份和還原方法集錦 推薦

    mysql 數(shù)據(jù)庫備份和還原方法集錦 推薦

    本文討論 MySQL 的備份和恢復(fù)機(jī)制,以及如何維護(hù)數(shù)據(jù)表,包括最主要的兩種表類型:MyISAM 和 Innodb,文中設(shè)計的 MySQL 版本為 5.0.22。
    2010-03-03
  • 解決MySQL啟動報錯:ERROR 2003 (HY000): Can''t connect to MySQL server on ''localhost'' (10061)

    解決MySQL啟動報錯:ERROR 2003 (HY000): Can''t connect to MySQL serv

    這篇文章主要介紹了解決MySQL啟動報錯:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061),本文解釋了如何解決該問題,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 一起來了解mysql數(shù)據(jù)庫

    一起來了解mysql數(shù)據(jù)庫

    大家好,本篇文章主要講的是一起來了解mysql數(shù)據(jù)庫,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • MySQL 表的垂直拆分和水平拆分

    MySQL 表的垂直拆分和水平拆分

    這篇文章主要介紹了MySQL 表的垂直拆分和水平拆分,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-07-07
  • MySQL存儲表情符號小技巧

    MySQL存儲表情符號小技巧

    這篇文章主要為大家介紹了MySQL如何存儲表情符號的小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • MySQL <>和<=> 運算符介紹

    MySQL <>和<=> 運算符介紹

    這篇文章主要介紹了MySQL <>和<=> 運算符介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 常見的十種SQL語句性能優(yōu)化策略詳解

    常見的十種SQL語句性能優(yōu)化策略詳解

    這篇文章主要介紹了常見的十種SQL語句性能優(yōu)化策略詳解,SQL語句性能優(yōu)化是提高數(shù)據(jù)庫查詢效率的關(guān)鍵步驟,可以減少查詢時間,提高系統(tǒng)響應(yīng)速度,本文將介紹一些常見的SQL語句性能優(yōu)化技巧,包括索引的使用、合理的查詢條件、避免全表掃描等,需要的朋友可以參考下
    2023-10-10
  • CentOs7.x安裝Mysql的詳細(xì)教程

    CentOs7.x安裝Mysql的詳細(xì)教程

    CentOS7的yum源中默認(rèn)好像是沒有MySQL的。為了解決這個問題,我們要先下載mysql的repo源。下面通過本教程給大家詳細(xì)介紹CentOs7.x安裝Mysql的方法,一起看看吧
    2016-12-12
  • mysql timestamp比較查詢遇到的坑及解決

    mysql timestamp比較查詢遇到的坑及解決

    這篇文章主要介紹了mysql timestamp比較查詢遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論