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

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

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

MYSQL行列轉(zhuǎn)置

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

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

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

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

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

準備1:創(chuàng)建表學(xué)生分數(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é)生課程分數(shù)'
)

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

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

準備2:往分數(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)

鼠標雙擊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é)科總分數(shù)
SUM(stuScore) AS '學(xué)科總分'
//from 后跟要查詢的表名
FROM grade
//GROUP BY 對stuName進行分組,沒有這句,會報錯,要不然,就是顯示第一行
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.當普通字段如stuName與聚合函數(shù)SUM(stuScore)一起查詢時 stuName,SUM(字段)

必須要分組,GROUP BY stuName

不然會報錯?。?!

總結(jié)

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

相關(guān)文章

最新評論

观塘区| 琼结县| 航空| 宾阳县| 宜兰县| 日土县| 迁西县| 宜川县| 图片| 乐昌市| 张掖市| 长岛县| 铜鼓县| 广宗县| 建湖县| 五指山市| 内江市| 新平| 高密市| 巴青县| 长治县| 翁源县| 红原县| 民和| 仙居县| 安新县| 西丰县| 镇江市| 嵊泗县| 榆中县| 武山县| 会泽县| 宜城市| 临城县| 墨竹工卡县| 昆山市| 麻江县| 多伦县| 芷江| 梁山县| 府谷县|