亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

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

列轉(zhuǎn)行(Pivoting)

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

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

假設(shè)有一個(gè)成績(jī)表 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)換前查詢(xún)結(jié)果

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

列轉(zhuǎn)行 SQL 語(yǔ)句

我們需要將 subject 列的不同值變?yōu)樾碌牧忻褜?duì)應(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)換后查詢(xún)結(jié)果

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

行轉(zhuǎn)列(Unpivoting)

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

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

假設(shè)現(xiàn)在有另一個(gè)表 students,它已經(jīng)以列轉(zhuǎn)行后的形式存儲(chǔ)了學(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)換前查詢(xún)結(jié)果

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

行轉(zhuǎn)列 SQL 語(yǔ)句

我們將每個(gè)科目的成績(jī)都變成單獨(dú)的一行記錄。

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    解決MySQL啟動(dòng)報(bào)錯(cuò):ERROR 2003 (HY000): Can''t connect to MySQL serv

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

    一起來(lái)了解mysql數(shù)據(jù)庫(kù)

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

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

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

    MySQL存儲(chǔ)表情符號(hào)小技巧

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

    MySQL <>和<=> 運(yùn)算符介紹

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

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

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

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

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

    mysql timestamp比較查詢(xún)遇到的坑及解決

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

最新評(píng)論