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一区二区
日本成年人网址| 午夜啪啪小视频| 国产91在线亚洲| 手机在线观看日韩av| 丰满少妇在线观看| 国产亚洲天堂网| 国产精品亚洲二区在线观看| 那种视频在线观看| 不卡av免费在线| 中文字幕成人在线视频| 欧美一级xxxx| 亚洲图色中文字幕| 日韩精品一区二区三区电影| 欧美美女黄色网| 成人网站免费观看入口| 美女日批免费视频| 男女污污的视频| 天天爱天天做天天操| a天堂资源在线观看| 国产美女无遮挡网站| 亚洲欧美另类动漫| 国产精品99久久久久久大便| 韩国黄色一级大片| 日本国产在线播放| 亚洲欧美久久久久| 国产在线视频三区| 成年网站在线免费观看| 国产日韩欧美久久| 欧美a级免费视频| 亚洲精品高清无码视频| 亚洲欧美一区二区三区不卡| 18禁网站免费无遮挡无码中文| 国产97色在线 | 日韩| 天天操精品视频| 少妇无码av无码专区在线观看 | 在线播放免费视频| 日韩欧美精品免费| 一个色综合久久| 18禁免费观看网站| 久久免费视频2| 啊啊啊国产视频| 亚洲熟妇无码av在线播放| 亚洲精品久久久中文字幕| 999在线观看视频| 亚洲自拍偷拍一区二区三区| 黄色片视频在线免费观看| 看一级黄色录像| jizz欧美性11| 日本熟妇人妻中出| 精品中文字幕av| 91免费版看片| 蜜臀av性久久久久蜜臀av| 午夜免费看视频| 欧美少妇性生活视频| 国产二区视频在线| 日韩精品免费一区| 国产福利片一区二区| 一级黄色片国产| www.夜夜爽| 国产色视频在线播放| 免费日韩中文字幕| 欧美少妇性生活视频| 女人天堂av手机在线| 人人妻人人澡人人爽欧美一区| 欧美激情第一区| 色偷偷中文字幕| 福利在线小视频| 色哺乳xxxxhd奶水米仓惠香| 精品国产鲁一鲁一区二区三区| 91蝌蚪视频在线观看| 九九热免费精品视频| 日韩视频在线免费看| 亚州精品一二三区| 91亚洲精品久久久蜜桃借种| 嫩草视频免费在线观看| 不用播放器的免费av| 国产成人免费高清视频| 无码av天堂一区二区三区| 搞av.com| 日本 片 成人 在线| 欧美性受xxxx黒人xyx性爽| 国产欧美综合一区| 欧美亚洲国产成人| 五月天av在线播放| 亚洲激情免费视频| 久章草在线视频| 天天看片天天操| 粉嫩av一区二区三区天美传媒| 日本手机在线视频| caoporn超碰97| 欧美做暖暖视频| 91网址在线播放| 波多野结衣 作品| 男人的天堂日韩| 亚洲啊啊啊啊啊| 国产精品亚洲a| 国内精品国产三级国产99| 成年网站在线免费观看| 亚洲天堂网2018| 日韩精品xxxx| 亚洲精品国产久| 国产女女做受ⅹxx高潮| 日韩精品手机在线观看| 91香蕉视频污版| 大伊香蕉精品视频在线| 17c国产在线| 久久美女福利视频| 99re6这里有精品热视频| 精品日韩久久久| 欧美三级在线观看视频| √天堂资源在线| 超碰在线97免费| 欧美黄色免费影院| 18黄暴禁片在线观看| 男人午夜视频在线观看| 成年人免费在线播放| 国产一二三四区在线观看| 奇米影视四色在线| 性生交免费视频| 丰满人妻中伦妇伦精品app| 国产精品一二三在线观看| 亚洲图色中文字幕| 怡红院亚洲色图| 日日躁夜夜躁aaaabbbb| 性生交免费视频| 另类小说第一页| 亚洲熟妇av一区二区三区| 黄色一级视频在线播放| 日韩欧美一级在线| 美女在线免费视频| 日韩精品福利片午夜免费观看| 精品久久免费观看| 天天爱天天做天天操| 久久久国产精华液999999 | 国产一区二区三区精彩视频| 大胆欧美熟妇xx| 国产freexxxx性播放麻豆| 成人在线免费观看网址| 国产欧美综合一区| 91传媒免费视频| 777av视频| 黄色高清无遮挡| 欧美成人乱码一二三四区免费| 国产美女18xxxx免费视频| 在线免费看污网站| 无码毛片aaa在线| 真人抽搐一进一出视频| 久久久噜噜噜www成人网| 91看片就是不一样| 色天使在线观看| 日韩精品综合在线| 红桃av在线播放| 青娱乐国产精品视频| 日韩黄色片在线| 久草福利视频在线| 国产精品夜夜夜爽张柏芝| 日韩一区二区高清视频| 那种视频在线观看| 91免费视频污| 激情五月开心婷婷| 日本一本在线视频| 欧美a在线视频| 国产奶头好大揉着好爽视频| 全黄性性激高免费视频| 69久久久久久| 国产午夜福利100集发布| 国产91色在线观看| 国产av熟女一区二区三区 | 在线观看av免费观看| 日本a在线免费观看| 一本色道久久亚洲综合精品蜜桃 | chinese少妇国语对白| 在线观看成人免费| 污片在线免费看| 青青青免费在线| 日韩久久久久久久久久久久| 韩国视频一区二区三区| 久久久久久人妻一区二区三区| 做a视频在线观看| 久久精品一区二| 国产v片免费观看| 精品亚洲视频在线| 国产高潮免费视频| 亚洲中文字幕无码不卡电影| 久久99久久99精品| 精品国产三级a∨在线| 中文字幕免费高清在线| 欧美精品成人网| 国产91对白刺激露脸在线观看| 日韩欧美精品免费| 激情视频小说图片| 亚洲天堂第一区| 警花观音坐莲激情销魂小说| 亚洲成人福利在线| 午夜国产一区二区三区| 国产精品igao| 99九九99九九九99九他书对| 五月婷婷丁香综合网| www.99在线| 精品久久久99|