最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MYSQL行列轉(zhuǎn)置方式

 更新時間:2025年01月16日 16:30:14   作者:<%相遇既是緣分%>  
本文介紹了如何使用MySQL和Navicat進(jìn)行列轉(zhuǎn)行操作,首先,創(chuàng)建了一個名為`grade`的表,并插入多條數(shù)據(jù),然后,通過修改查詢SQL語句,使用`CASE`和`IF`函數(shù)將列轉(zhuǎn)換為行,總結(jié)指出,`SUM`可以替換為`MAX`、`MIN`、`AVG`等聚合函數(shù),并且在查詢中需要對普通字段進(jìn)行分組

MYSQL行列轉(zhuǎn)置

環(huán)境準(zhǔn)備:mysql,navicat 

本文講解列轉(zhuǎn)行

數(shù)據(jù)庫是這樣顯示的

想要轉(zhuǎn)換成下面這樣顯示

開始列轉(zhuǎn)行之前的準(zhǔn)備

準(zhǔn)備1:創(chuàng)建表學(xué)生分?jǐn)?shù)表grade

CREATE TABLE grade
(
	stuName VARCHAR(20) NOT NULL COMMENT '學(xué)生姓名',
	stuCourse VARCHAR(20) NOT NULL COMMENT '學(xué)生課程名',
	stuScore INT NOT NULL COMMENT '學(xué)生課程分?jǐn)?shù)'
)

grade表創(chuàng)建好了,也可以直接navicat數(shù)據(jù)庫右鍵鼠標(biāo)建表

鼠標(biāo)右鍵單擊grade設(shè)計表查看表結(jié)構(gòu)設(shè)置,結(jié)果與sql語句設(shè)置一致繼續(xù)往下走

準(zhǔn)備2:往分?jǐn)?shù)表grade插入多條數(shù)據(jù)

INSERT INTO grade(stuName,stuCourse,stuScore)
VALUES
('張三','語文',110),
('張三','數(shù)學(xué)',130),
('張三','英語',60),
('張三','體育',40),
('李四','語文',108),
('李四','數(shù)學(xué)',145),
('李四','英語',28),
('李四','體育',48),
('王五','語文',120),
('王五','數(shù)學(xué)',99),
('王五','英語',140),
('王五','體育',42)

鼠標(biāo)雙擊grade查看數(shù)據(jù)是否已插入,OK

下面開始步入正題

步驟一:查詢表內(nèi)所有數(shù)據(jù)(注釋:'*'代表所有)

SELECT * FROM grade

查詢結(jié)果顯然不符合我們的預(yù)期

步驟二修改查詢的sql語句 

  • 方式一:CASE
CASE case_value
	WHEN when_value THEN
		statement_list
	ELSE
		statement_list
END CASE;

具體代碼

SELECT stuName,
SUM(CASE WHEN stuCourse='語文' THEN stuScore ELSE 0 END) AS '語文',
SUM(CASE WHEN stuCourse='數(shù)學(xué)' THEN stuScore ELSE 0 END) AS '數(shù)學(xué)',
SUM(CASE WHEN stuCourse='英語' THEN stuScore ELSE 0 END) AS '英語',
SUM(CASE WHEN stuCourse='體育' THEN stuScore ELSE 0 END) AS '體育',
SUM(stuScore) AS '學(xué)科總分'
FROM grade
GROUP BY stuName

以下為代碼注釋:

//SELECT 后跟查詢結(jié)果
SELECT stuName, 
//SUM 聚合函數(shù)(官方寫好求和用的) 
// CASE WHEN stuCourse='語文' THEN stuScore ELSE 0 END 
用于替換值 若stuCourse='語文' 則對應(yīng)顯示stuScore,否則顯示0
//AS 重命名 列/(也叫字段)名
SUM(CASE WHEN stuCourse='語文' THEN stuScore ELSE 0 END) AS '語文',
SUM(CASE WHEN stuCourse='數(shù)學(xué)' THEN stuScore ELSE 0 END) AS '數(shù)學(xué)',
SUM(CASE WHEN stuCourse='英語' THEN stuScore ELSE 0 END) AS '英語',
SUM(CASE WHEN stuCourse='體育' THEN stuScore ELSE 0 END) AS '體育',
//SUM(stuScore)求各個學(xué)科總分?jǐn)?shù)
SUM(stuScore) AS '學(xué)科總分'
//from 后跟要查詢的表名
FROM grade
//GROUP BY 對stuName進(jìn)行分組,沒有這句,會報錯,要不然,就是顯示第一行
GROUP BY stuName

查詢結(jié)果,符合預(yù)期,列轉(zhuǎn)行成功

  • 方式二:if
IF(expr1,expr2,expr3)

具體代碼

SELECT stuName,
SUM(IF(stuCourse='語文',stuScore,0)) AS '語文',
SUM(IF(stuCourse='數(shù)學(xué)',stuScore,0)) AS '數(shù)學(xué)',
SUM(IF(stuCourse='英語',stuScore,0)) AS '英語',
SUM(IF(stuCourse='體育',stuScore,0)) AS '體育',
SUM(stuScore) AS '學(xué)科總分'
FROM grade
GROUP BY stuName

效果和方式一是一樣的

小節(jié):

1.這里面的SUM可以換成MAX,MIN,AVG等等,因為各個字段如stuCourse對應(yīng)一個stuScore所以用哪個都一樣

2.當(dāng)普通字段如stuName與聚合函數(shù)SUM(stuScore)一起查詢時 stuName,SUM(字段)

必須要分組,GROUP BY stuName

不然會報錯?。。?/p>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

洛阳市| 黔东| 商洛市| 滨海县| 册亨县| 安西县| 广德县| 苏尼特左旗| 顺昌县| 昌乐县| 昭平县| 嘉祥县| 怀远县| 承德县| 普格县| 犍为县| 延津县| 太原市| 会泽县| 双桥区| 宣恩县| 辉南县| 吉木乃县| 永寿县| 阿瓦提县| 牟定县| 信宜市| 寿阳县| 许昌县| 旅游| 治县。| 定州市| 天门市| 杂多县| 建宁县| 五家渠市| 新丰县| 苗栗市| 婺源县| 中宁县| 太湖县|