gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

mysql的行怎么轉為列

mysql行轉列的方法:1、利用“SUM(CASE 表名 WHEN 字段名 THEN score ELSE 0 END) as 字段名”操作轉換;2、利用“SUM(IF(表名=字段名,score,0)) as 字段名”操作轉換。

mysql的行怎么轉為列

本教程操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。

mysql的行怎么轉為列

行轉列

即將原本同一列下多行的不同內容作為多個字段,輸出對應內容。

建表語句

DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score(     id INT(11) NOT NULL auto_increment,     userid VARCHAR(20) NOT NULL COMMENT '用戶id',     subject VARCHAR(20) COMMENT '科目',     score DOUBLE COMMENT '成績',     PRIMARY KEY(id) )ENGINE = INNODB DEFAULT CHARSET = utf8;

插入數據

INSERT INTO tb_score(userid,subject,score) VALUES ('001','語文',90); INSERT INTO tb_score(userid,subject,score) VALUES ('001','數學',92); INSERT INTO tb_score(userid,subject,score) VALUES ('001','英語',80); INSERT INTO tb_score(userid,subject,score) VALUES ('002','語文',88); INSERT INTO tb_score(userid,subject,score) VALUES ('002','數學',90); INSERT INTO tb_score(userid,subject,score) VALUES ('002','英語',75.5); INSERT INTO tb_score(userid,subject,score) VALUES ('003','語文',70); INSERT INTO tb_score(userid,subject,score) VALUES ('003','數學',85); INSERT INTO tb_score(userid,subject,score) VALUES ('003','英語',90); INSERT INTO tb_score(userid,subject,score) VALUES ('003','政治',82);

查詢數據表中的內容(即轉換前的結果)

SELECT * FROM tb_score

先來看一下轉換后的結果:

mysql的行怎么轉為列

可以看出,這里行轉列是將原來的subject字段的多行內容選出來,作為結果集中的不同列,并根據userid進行分組顯示對應的score。

1、使用case…when….then 進行行轉列

SELECT userid, SUM(CASE `subject` WHEN '語文' THEN score ELSE 0 END) as '語文', SUM(CASE `subject` WHEN '數學' THEN score ELSE 0 END) as '數學', SUM(CASE `subject` WHEN '英語' THEN score ELSE 0 END) as '英語', SUM(CASE `subject` WHEN '政治' THEN score ELSE 0 END) as '政治'  FROM tb_score  GROUP BY userid

2、使用IF() 進行行轉列:

SELECT userid, SUM(IF(`subject`='語文',score,0)) as '語文', SUM(IF(`subject`='數學',score,0)) as '數學', SUM(IF(`subject`='英語',score,0)) as '英語', SUM(IF(`subject`='政治',score,0)) as '政治'  FROM tb_score  GROUP BY userid

注意點:

(1)SUM() 是為了能夠使用GROUP BY根據userid進行分組,因為每一個userid對應的subject="語文"的記錄只有一條,所以SUM() 的值就等于對應那一條記錄的score的值。

假如userid ='001' and subject='語文' 的記錄有兩條,則此時SUM() 的值將會是這兩條記錄的和,同理,使用Max()的值將會是這兩條記錄里面值最大的一個。但是正常情況下,一個user對應一個subject只有一個分數,因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函數都可以達到行轉列的效果。

(2)IF(`subject`='語文',score,0) 作為條件,即對所有subject='語文'的記錄的score字段進行SUM()、MAX()、MIN()、AVG()操作,如果score沒有值則默認為0。

3、利用SUM(IF()) 生成列 + WITH ROLLUP 生成匯總行,并利用 IFNULL將匯總行標題顯示為Total

SELECT IFNULL(userid,'total') AS userid, SUM(IF(`subject`='語文',score,0)) AS 語文, SUM(IF(`subject`='數學',score,0)) AS 數學, SUM(IF(`subject`='英語',score,0)) AS 英語, SUM(IF(`subject`='政治',score,0)) AS 政治, SUM(IF(`subject`='total',score,0)) AS total FROM(     SELECT userid,IFNULL(`subject`,'total') AS `subject`,SUM(score) AS score     FROM tb_score     GROUP BY userid,`subject`     WITH ROLLUP     HAVING userid IS NOT NULL )AS A  GROUP BY userid WITH ROLLUP;

運行結果:

mysql的行怎么轉為列

4、利用SUM(IF()) 生成列 + UNION 生成匯總行,并利用 IFNULL將匯總行標題顯示為 Total

SELECT userid, SUM(IF(`subject`='語文',score,0)) AS 語文, SUM(IF(`subject`='數學',score,0)) AS 數學, SUM(IF(`subject`='英語',score,0)) AS 英語, SUM(IF(`subject`='政治',score,0)) AS 政治, SUM(score) AS TOTAL  FROM tb_score GROUP BY userid UNION SELECT 'TOTAL',SUM(IF(`subject`='語文',score,0)) AS 語文, SUM(IF(`subject`='數學',score,0)) AS 數學, SUM(IF(`subject`='英語',score,0)) AS 英語, SUM(IF(`subject`='政治',score,0)) AS 政治, SUM(score) FROM tb_score

運行結果:

mysql的行怎么轉為列

5、利用SUM(IF()) 生成列,直接生成結果不再利用子查詢

SELECT IFNULL(userid,'TOTAL') AS userid, SUM(IF(`subject`='語文',score,0)) AS 語文, SUM(IF(`subject`='數學',score,0)) AS 數學, SUM(IF(`subject`='英語',score,0)) AS 英語, SUM(IF(`subject`='政治',score,0)) AS 政治, SUM(score) AS TOTAL  FROM tb_score GROUP BY userid WITH ROLLUP;

運行結果:

mysql的行怎么轉為列

6、動態,適用于列不確定情況

SET @EE=''; select @EE :=CONCAT(@EE,'sum(if(subject= '',subject,'',score,0)) as ',subject, ',') AS aa FROM (SELECT DISTINCT subject FROM tb_score) A ; SET @QQ = CONCAT('select ifnull(userid,'TOTAL')as userid,',@EE,' sum(score) as TOTAL from tb_score group by userid WITH ROLLUP'); -- SELECT @QQ; PREPARE stmt FROM @QQ; EXECUTE stmt; DEALLOCATE PREPARE stmt;

運行結果:

mysql的行怎么轉為列

7、合并字段顯示:利用group_concat()

SELECT userid,GROUP_CONCAT(`subject`,":",score)AS 成績 FROM tb_score GROUP BY userid

運行結果:

mysql的行怎么轉為列

group_concat(),手冊上說明:該函數返回帶有來自一個組的連接的非NULL值的字符串結果。

比較抽象,難以理解。通俗點理解,其實是這樣的:group_concat()會計算哪些行屬于同一組,將屬于同一組的列顯示出來。要返回哪些列,由函數參數(就是字段名)決定。分組必須有個標準,就是根據group by指定的列進行分組。

結論:group_concat()函數可以很好的建屬于同一分組的多個行轉化為一個列。

推薦學習:mysql視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产视频一区二区三区在线播放| 分分操这里只有精品| 国产又大又黄又粗又爽| 黄色一级免费大片| 天天av天天操| 黄色一级片在线看| 99视频免费播放| 国产乱码一区二区三区四区| 国产农村妇女精品久久| 日韩视频在线观看视频| 日韩video| 亚洲欧美国产中文| 日韩欧美视频免费在线观看| 精品少妇无遮挡毛片| 深夜做爰性大片蜜桃| 精品一卡二卡三卡| 潘金莲一级淫片aaaaa免费看| 青青在线免费观看| 日本成人xxx| 9999在线观看| 中国黄色片一级| 精品视频无码一区二区三区| 青青青青在线视频| 精品国产乱码久久久久久1区二区| 日韩免费视频播放| 日本a视频在线观看| 日韩xxxx视频| 国产精品无码av在线播放| 国产91视频一区| 国产一级黄色录像片| 熟女熟妇伦久久影院毛片一区二区| 久久精品午夜福利| 性猛交ⅹ×××乱大交| 欧美一级裸体视频| 日日噜噜噜噜久久久精品毛片| 国产在线观看福利| 欧美少妇性生活视频| 中文字幕av专区| 久久人人爽人人片| 又大又硬又爽免费视频| 成人在线观看你懂的| 情侣黄网站免费看| 日本中文字幕二区| 欧美一区二区激情| 欧美日韩亚洲自拍| 国产精品国产对白熟妇| 亚洲视频在线观看一区二区三区| 99re精彩视频| 日韩av资源在线| 日韩视频 中文字幕| 中文字幕天天干| 国产人妻777人伦精品hd| www.com操| 97公开免费视频| 久久国产亚洲精品无码| 四虎精品欧美一区二区免费| 国产熟人av一二三区| 成人av一级片| 免费看毛片的网址| 日韩视频 中文字幕| www.cao超碰| 国产极品美女高潮无套久久久| 嫩草影院中文字幕| 超碰91在线播放| 黄色一级视频播放| 色18美女社区| 大片在线观看网站免费收看| 国产精品igao网网址不卡| 免费黄频在线观看| 伊人国产精品视频| 黄色网址在线免费看| 日本一二三区视频在线| 日韩一级特黄毛片| 日本www在线视频| 国产日韩欧美久久| 久久人妻无码一区二区| 免费不卡av在线| 999在线精品视频| 日本丰满大乳奶| 凹凸国产熟女精品视频| 99视频精品免费| 天天做天天躁天天躁| 亚洲一区二区中文字幕在线观看| 潘金莲激情呻吟欲求不满视频| 日本精品久久久久中文字幕| 懂色av粉嫩av蜜臀av| 亚洲熟妇无码一区二区三区导航| 一本久道综合色婷婷五月| 日日夜夜精品视频免费观看| 日本一区午夜艳熟免费| 日本中文字幕观看| 亚洲自偷自拍熟女另类| 国产xxxx振车| 玖玖精品在线视频| 一区二区三区一级片| caoporn超碰97| 午夜精品久久久内射近拍高清| 亚洲热在线视频| 亚洲一级片免费观看| 天天操天天摸天天爽| 日韩有码免费视频| 久久精品午夜福利| 中文字幕在线观看第三页| 日本在线视频www| 日韩在线xxx| 视频在线观看免费高清| 91欧美一区二区三区| 欧洲熟妇精品视频| 精品这里只有精品| 最新av网址在线观看| 特级西西444| 欧美日韩国产精品激情在线播放| 中文字幕の友人北条麻妃| 日本天堂免费a| 激情深爱综合网| 污片在线免费看| 欧美日韩一级在线| 台湾无码一区二区| 中文字幕乱码人妻综合二区三区| 91最新在线观看| 午夜免费福利网站| 免费欧美一级视频| 黄色一级片免费播放| 97视频在线免费| 91制片厂毛片| 欧美,日韩,国产在线| 亚洲三级在线观看视频| 色欲色香天天天综合网www| 亚洲精品中文字幕无码蜜桃| 加勒比海盗1在线观看免费国语版| 国产视频在线观看网站| 91香蕉视频污版| 欧美这里只有精品| 在线观看中文av| 亚洲视频在线观看一区二区三区| 青青草综合视频| 91亚洲精品久久久蜜桃借种| 男人亚洲天堂网| 鲁一鲁一鲁一鲁一色| 91免费国产精品| 日韩视频一二三| 午夜啪啪福利视频| 图片区乱熟图片区亚洲| 最新天堂中文在线| www.99r| 成年人三级黄色片| 免费黄频在线观看| 国产91av视频在线观看| 欧美日韩久久婷婷| av电影一区二区三区| 好色先生视频污| 最新av网址在线观看| 日韩成人手机在线| 中国丰满人妻videoshd | 国产精品又粗又长| 丁香花在线影院观看在线播放| r级无码视频在线观看| 免费在线观看亚洲视频| 久久久久免费精品| eeuss中文| 亚洲色图久久久| 97精品国产97久久久久久粉红| www婷婷av久久久影片| 激情五月亚洲色图| 日本一道在线观看| 毛片av免费在线观看| 欧美精品色视频| 亚洲综合欧美激情| av免费观看国产| 国产精品一区在线免费观看| 亚洲免费av一区二区三区| 成人免费a级片| 伊人国产精品视频| 免费黄色一级网站| 国产高清精品在线观看| 国产精品一色哟哟| 亚洲精品国产久| 天堂av在线8| 国产成人手机视频| 丁香啪啪综合成人亚洲| 久久这里只有精品23| 无码毛片aaa在线| 国产精品av免费观看| 一级性生活视频| 99久热在线精品视频| 男人c女人视频| 国产欧美精品aaaaaa片| 9色porny| 2022亚洲天堂| 99re精彩视频| 亚洲美女自拍偷拍| 真人抽搐一进一出视频| 欧美黄色免费影院| 另类小说色综合| 国产高清免费在线| 国产精品宾馆在线精品酒店| 天天爽天天爽夜夜爽| 国产日本在线播放| 激情文学亚洲色图| mm131国产精品|