校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > MySQL 中行轉(zhuǎn)列的方法

MySQL 中行轉(zhuǎn)列的方法

熱門標(biāo)簽:房產(chǎn)智能外呼系統(tǒng)品牌 常州電銷外呼系統(tǒng)一般多少錢 沃克斯電梯外呼線路圖 地圖標(biāo)注被騙三百怎么辦 云南語音外呼系統(tǒng)平臺(tái) 天智外呼系統(tǒng) 北京人工外呼系統(tǒng)價(jià)錢 400電話鄭州申請(qǐng) 福州呼叫中心外呼系統(tǒng)哪家好

MySQL行轉(zhuǎn)列操作

    所謂的行轉(zhuǎn)列操作,就是將一個(gè)表的行信息轉(zhuǎn)化為列信息,說著可能比較籠統(tǒng),這里先舉個(gè)例子,如下:

+----+-----------+--------+-------+
| ID | USER_NAME | COURSE | SCORE |
+----+-----------+--------+-------+
|  | 張三   | 數(shù)學(xué)  |   |
|  | 張三   | 語文  |   |
|  | 張三   | 英語  |   |
|  | 李四   | 數(shù)學(xué)  |   |
|  | 李四   | 語文  |   |
|  | 李四   | 英語  |   |
|  | 王五   | 數(shù)學(xué)  |   |
|  | 王五   | 語文  |   |
|  | 王五   | 英語  |   |
+----+-----------+--------+-------+
 rows in set (0.00 sec)

+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   |   |   |
| 李四   |   |   |   |
| 王五   |   |   |   |
+-----------+--------+--------+--------+
 rows in set (0.00 sec)

    上面的例子中,表1給出了三個(gè)學(xué)生的三門成績(jī),而表2是將表1的行記錄信息(學(xué)科、姓名)轉(zhuǎn)化為列信息,并根據(jù)不同的user_name進(jìn)行分組顯示。

1 case when操作方法

    要實(shí)現(xiàn)上面的功能,我們需要進(jìn)行分析,首先,我們需要生成三個(gè)列,分別是數(shù)學(xué),語文和英語,然后給每個(gè)列中的值填入對(duì)應(yīng)的數(shù)據(jù)。這里需要用到mysql的case when then end操作,也就是條件操作,關(guān)于這個(gè)條件語句,首先我們給出解釋:

case colume 
  when condition1 then result1
  when condition2 then result2
  when condition3 then result3
else result4
end

   上面的語法,可以理解為當(dāng)column的值符合condition1的時(shí)候,用result1去替換column的值,以此類推,當(dāng)column值都不符合的時(shí)候,用result4去替換column的值。

    現(xiàn)在開始試驗(yàn):

    首先我們創(chuàng)建一張表,并插入如下數(shù)據(jù):

mysql-yeyz ::>>select * from test_tbl;
+----+-----------+--------+-------+
| ID | USER_NAME | COURSE | SCORE |
+----+-----------+--------+-------+
|  | 張三   | 數(shù)學(xué)  |   |
|  | 張三   | 語文  |   |
|  | 張三   | 英語  |   |
|  | 李四   | 數(shù)學(xué)  |   |
|  | 李四   | 語文  |   |
|  | 李四   | 英語  |   |
|  | 王五   | 數(shù)學(xué)  |   |
|  | 王五   | 語文  |   |
|  | 王五   | 英語  |   |
+----+-----------+--------+-------+
 rows in set (0.00 sec)

    根據(jù)上面case when語法,當(dāng)碰到課程為'數(shù)學(xué)'的時(shí)候,我們定義一個(gè)列'數(shù)學(xué)',并把它的score填入其中,如果碰到'語文'或者'英語',那么把它替換為0,我們可以先籠統(tǒng)的寫出如下SQL:

mysql-yeyz ::>>SELECT user_name ,
(CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué) 
FROM test_tbl;
+-----------+--------+
| user_name | 數(shù)學(xué)  |
+-----------+--------+
| 張三   |   |
| 張三   |    |
| 張三   |    |
| 李四   |   |
| 李四   |    |
| 李四   |    |
| 王五   |   |
| 王五   |    |
| 王五   |    |
+-----------+--------+
 rows in set (0.00 sec)

    我們發(fā)現(xiàn)上面的表只有兩個(gè)列,根據(jù)SQL規(guī)則,我們可以把'語文'和'英語'的值也加入進(jìn)去,一次性多寫幾個(gè)列,如下:

mysql-yeyz ::>>SELECT user_name ,
  ->   (CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué),
  ->   (CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   (CASE course WHEN '英語' THEN score ELSE END ) 英語
  -> FROM test_tbl;
+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   |    |    |
| 張三   |    |   |    |
| 張三   |    |    |   |
| 李四   |   |    |    |
| 李四   |    |   |    |
| 李四   |    |    |   |
| 王五   |   |    |    |
| 王五   |    |   |    |
| 王五   |    |    |   |
+-----------+--------+--------+--------+
 rows in set (0.00 sec)

    這下好了,我們有了所有的記錄了,已經(jīng)快要達(dá)到我們的目的了,看看和最終結(jié)果的差距:

+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   |   |   |
| 李四   |   |   |   |
| 王五   |   |   |   |
+-----------+--------+--------+--------+

    好像就剩把那些同名的學(xué)生信息都合并一下就好了,自然而然我們想到了group_by(user_name)的操作,而group_by操作需要和一些聚合函數(shù)(MAX,MIN,AVG,SUM,COUNT等)進(jìn)行搭配。由于每條記錄中只包含當(dāng)前學(xué)科的成績(jī),其他學(xué)科的成績(jī)?yōu)?,所以我們使用MAX函數(shù)和SUM函數(shù)的結(jié)果是相同的,但是不能使用AVG函數(shù)和MIN函數(shù),這應(yīng)該很好理解吧。

    下面我們給出最終結(jié)果:

mysql-yeyz 13:55:52>>SELECT user_name ,
  ->   MAX(CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué),
  ->   MAX(CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   MAX(CASE course WHEN '英語' THEN score ELSE END ) 英語
  -> FROM test_tbl
  -> GROUP BY USER_NAME;
+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   34 |   58 |   58 |
| 李四   |   45 |   87 |   45 |
| 王五   |   76 |   34 |   89 |
+-----------+--------+--------+--------+
3 rows in set (0.00 sec)



mysql-yeyz ::>>SELECT user_name ,
  ->   sum(CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué),
  ->   sum(CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   sum(CASE course WHEN '英語' THEN score ELSE END ) 英語
  -> FROM test_tbl
  -> GROUP BY USER_NAME;
+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   34 |   58 |   58 |
| 李四   |   45 |   87 |   45 |
| 王五   |   76 |   34 |   89 |
+-----------+--------+--------+--------+
3 rows in set (0.00 sec)


mysql-yeyz ::>>SELECT user_name ,
  ->   MIN(CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué),
  ->   MIN(CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   MIN(CASE course WHEN '英語' THEN score ELSE END ) 英語
  -> FROM test_tbl
  -> GROUP BY USER_NAME;
+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   0 |   0 |   0 |
| 李四   |   0 |   0 |   0 |
| 王五   |   0 |   0 |   0 |
+-----------+--------+--------+--------+
3 rows in set (0.00 sec)

     可以看出來,使用MAX和使用SUM的結(jié)果是一樣的,但是使用MIN作為聚合函數(shù),會(huì)導(dǎo)致最終輸出的結(jié)果都是0,因?yàn)槊看味歼x的是該user_name指定學(xué)科的最小的值,也就是0。這樣的結(jié)果就很好理解了。

2 if操作方法

    上面的case  when操作方法理解了,那么if的操作方法也很好理解,原理是一樣的,只不過是把case when的語法轉(zhuǎn)換為if方式,如下

mysql-yeyz 14:12:42>>SELECT user_name ,
  ->   MAX(if (course= '數(shù)學(xué)',score,) ) 數(shù)學(xué),
  ->   MAX(if (course= '語文',score,) ) 語文,
  ->   MAX(if (course= '英語',score,) ) 英語
  -> FROM test_tbl
  -> GROUP BY USER_NAME;
+-----------+--------+--------+--------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   34 |   58 |   58 |
| 李四   |   45 |   87 |   45 |
| 王五   |   76 |   34 |   89 |
+-----------+--------+--------+--------+
3 rows in set (0.00 sec)

3 添加total列

    當(dāng)我們把基本的行轉(zhuǎn)列實(shí)現(xiàn)之后,我們現(xiàn)在需要在轉(zhuǎn)換之后的表上面添加一個(gè)total字段,這個(gè)字段的添加我們可以通過下面的方法,即在最開始統(tǒng)計(jì)的時(shí)候,就把score值也統(tǒng)計(jì)進(jìn)去,如下:

mysql-yeyz 14:18:06>>SELECT user_name ,
  ->   (CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué),
  ->   (CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   (CASE course WHEN '英語' THEN score ELSE END ) 英語,
  -> (score) total
  -> FROM test_tbl;
+-----------+--------+--------+--------+-------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  | total |
+-----------+--------+--------+--------+-------+
| 張三   |   34 |   0 |   0 |  34 |
| 張三   |   0 |   58 |   0 |  58 |
| 張三   |   0 |   0 |   58 |  58 |
| 李四   |   45 |   0 |   0 |  45 |
| 李四   |   0 |   87 |   0 |  87 |
| 李四   |   0 |   0 |   45 |  45 |
| 王五   |   76 |   0 |   0 |  76 |
| 王五   |   0 |   34 |   0 |  34 |
| 王五   |   0 |   0 |   89 |  89 |
+-----------+--------+--------+--------+-------+
9 rows in set (0.00 sec)

    上面的結(jié)果是沒有聚合后的結(jié)果,這里需要注意的是,如果我們要聚合,前三個(gè)列可以使用sum或者max的方法,最后一個(gè)列一定要使用sum的方法,因?yàn)槲覀円蟮氖强偝煽?jī),使用max的方法會(huì)導(dǎo)致取值變?yōu)榉謹(jǐn)?shù)最高的那個(gè)值。最后的sql如下:

mysql-yeyz 14:18:29>>SELECT user_name ,
  ->   sum(CASE course WHEN '數(shù)學(xué)' THEN score ELSE END ) 數(shù)學(xué),
  ->   sum(CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   sum(CASE course WHEN '英語' THEN score ELSE END ) 英語,
  -> sum(score) total
  -> FROM test_tbl
  -> GROUP BY USER_NAME;
+-----------+--------+--------+--------+-------+
| user_name | 數(shù)學(xué)  | 語文  | 英語  | total |
+-----------+--------+--------+--------+-------+
| 張三   |   34 |   58 |   58 |  150 |
| 李四   |   45 |   87 |   45 |  177 |
| 王五   |   76 |   34 |   89 |  199 |
+-----------+--------+--------+--------+-------+
3 rows in set (0.00 sec)

4 簡(jiǎn)單方法 group_concat

    如果我們對(duì)于結(jié)果的顯示格式要求不是那么細(xì)致的話,也可以用一種粗獷的方法,就是group_concat函數(shù),將所有的列都寫在一起,用一個(gè)字段表示,效果如下:

mysql-yeyz 14:19:13>>SELECT user_name,
GROUP_CONCAT(`course`,":",score)AS 成績(jī) 
FROM test_tbl 
GROUP BY user_name;
+-----------+-------------------------------+
| user_name | 成績(jī)             |
+-----------+-------------------------------+
| 張三   | 數(shù)學(xué):34,語文:58,英語:58    |
| 李四   | 數(shù)學(xué):45,語文:87,英語:45    |
| 王五   | 數(shù)學(xué):76,語文:34,英語:89    |
+-----------+-------------------------------+
3 rows in set (0.00 sec)

    這種方法相當(dāng)于直接針對(duì)原始表做了一個(gè)分組,也能夠應(yīng)付一定的應(yīng)用場(chǎng)景。

以上就是MySQL 中行轉(zhuǎn)列的方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL 行轉(zhuǎn)列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL中將一列以逗號(hào)分隔的值行轉(zhuǎn)列的實(shí)現(xiàn)
  • 當(dāng)Mysql行鎖遇到復(fù)合主鍵與多列索引詳解
  • Mysql 相鄰兩行記錄某列的差值方法
  • mysql指定某行或者某列的排序?qū)崿F(xiàn)方法
  • mysql 列轉(zhuǎn)行,合并字段的方法(必看)
  • mysql列轉(zhuǎn)行以及年月分組實(shí)例
  • mysql 列轉(zhuǎn)行的技巧(分享)
  • mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實(shí)例詳解
  • mysql 行列動(dòng)態(tài)轉(zhuǎn)換的實(shí)現(xiàn)(列聯(lián)表,交叉表)
  • 數(shù)據(jù)庫實(shí)現(xiàn)行列轉(zhuǎn)換(mysql示例)

標(biāo)簽:移動(dòng) 黔東 拉薩 珠海 徐州 沈陽 沈陽 鹽城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL 中行轉(zhuǎn)列的方法》,本文關(guān)鍵詞  MySQL,中行,轉(zhuǎn)列,的,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL 中行轉(zhuǎn)列的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL 中行轉(zhuǎn)列的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    8x8x8国产精品| 精品国产一二三区| 精品国产一区二区国模嫣然| 亚洲少妇屁股交4| 韩国毛片一区二区三区| 色综合久久天天| 久久九九99视频| 日本sm残虐另类| 91亚洲精品乱码久久久久久蜜桃 | 国产最新精品免费| 欧美日韩免费观看一区三区| 国产精品久久久99| 丁香另类激情小说| 久久精品人人做人人综合| 日韩电影免费在线| 欧美在线免费观看亚洲| 亚洲免费观看在线视频| 成人福利视频在线| 亚洲国产激情av| 国产精品69毛片高清亚洲| 天堂午夜影视日韩欧美一区二区| 色综合中文综合网| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚欧色一区w666天堂| 欧美专区日韩专区| 亚洲图片欧美视频| 一本一道综合狠狠老| 18欧美亚洲精品| 99在线精品观看| 亚洲欧洲精品一区二区三区| 成人美女在线观看| 亚洲婷婷综合久久一本伊一区| 国v精品久久久网| 中文字幕欧美区| eeuss影院一区二区三区| 中文字幕一区二区三区在线不卡 | 一区二区在线电影| 91九色02白丝porn| 亚洲成人先锋电影| 日韩一区二区三| 久久国产精品99久久久久久老狼| 日韩欧美视频一区| 极品少妇xxxx精品少妇| 国产网红主播福利一区二区| caoporm超碰国产精品| 一区二区高清免费观看影视大全| 在线观看91精品国产入口| 视频一区在线视频| 久久久蜜桃精品| 99re这里只有精品6| 亚洲第一二三四区| 日韩欧美一级二级| 成人性生交大片免费看视频在线| 日韩美女视频一区二区| 欧美日韩视频在线一区二区| 精品一区在线看| 国产精品国产三级国产普通话蜜臀| 色综合久久九月婷婷色综合| 日本午夜精品一区二区三区电影| 久久久久久久一区| 欧美亚洲尤物久久| 琪琪一区二区三区| 亚洲欧美在线视频观看| 欧美午夜精品一区二区蜜桃 | 久久精品在线观看| 不卡欧美aaaaa| 成人午夜免费电影| 国产丶欧美丶日本不卡视频| 精品一区二区在线看| 蜜臀久久99精品久久久久宅男| 亚洲成av人片www| 亚洲成av人片| 蜜桃一区二区三区在线观看| 日韩成人一区二区三区在线观看| 肉丝袜脚交视频一区二区| 亚洲国产欧美另类丝袜| 亚洲成人av在线电影| 亚洲高清在线视频| 首页国产欧美日韩丝袜| 麻豆一区二区三区| 激情久久五月天| 国产乱人伦偷精品视频免下载| 精品一区二区国语对白| 国产黑丝在线一区二区三区| 国产精品亚洲专一区二区三区| 国产精品一级片在线观看| 大胆亚洲人体视频| 一本到一区二区三区| 欧美日韩中文另类| 日韩一区和二区| 久久精品夜色噜噜亚洲a∨| 国产精品美女久久久久久| 亚洲日本va在线观看| 亚洲午夜日本在线观看| 蜜臀久久久99精品久久久久久| 国产一区二区看久久| 久久久久久久av麻豆果冻| 亚洲国产精品成人综合| 亚洲精选免费视频| 日本亚洲免费观看| 国产成人在线观看| 91色.com| 国内精品久久久久影院薰衣草| 国产精品资源网站| 色婷婷精品久久二区二区蜜臂av | 国产夫妻精品视频| 色88888久久久久久影院按摩| 欧美日韩国产小视频在线观看| 欧美成va人片在线观看| 亚洲视频电影在线| 精品一二线国产| 91激情五月电影| 精品国产不卡一区二区三区| 最好看的中文字幕久久| 毛片av中文字幕一区二区| 成人免费视频国产在线观看| 欧美精品久久天天躁| 国产女主播一区| 日韩精品高清不卡| www.性欧美| 精品国产乱码久久久久久浪潮| 暴力调教一区二区三区| 欧美精品色一区二区三区| 国产视频不卡一区| 日韩中文字幕区一区有砖一区| 丁香婷婷综合网| 欧美一区二区三区视频免费 | 欧美性受xxxx| 国产欧美一区二区在线观看| 肉色丝袜一区二区| 色综合久久中文综合久久牛| 久久亚洲免费视频| 三级不卡在线观看| 91网上在线视频| 狠狠色狠狠色合久久伊人| 欧美在线观看视频一区二区三区| 久久精品视频网| 麻豆国产91在线播放| 欧美最猛黑人xxxxx猛交| 国产精品网曝门| 国内国产精品久久| 91精品在线免费| 亚洲永久精品国产| av电影在线不卡| 国产亚洲短视频| 久国产精品韩国三级视频| 在线成人av影院| 亚洲电影在线免费观看| 色www精品视频在线观看| 国产精品的网站| 国产精品欧美一级免费| 国产精品综合av一区二区国产馆| 91麻豆精品国产| 日韩av电影免费观看高清完整版 | 欧美xxx久久| 日本女优在线视频一区二区| 欧美日韩中文国产| 婷婷夜色潮精品综合在线| 色婷婷狠狠综合| 亚洲精品日日夜夜| 91福利在线看| 亚洲一区二区在线观看视频| 色视频一区二区| 欧美亚洲国产一卡| 亚洲一区日韩精品中文字幕| 91高清在线观看| 午夜精品一区在线观看| 欧美日韩视频第一区| 性做久久久久久久免费看| 欧美精品在线观看一区二区| 日韩av在线播放中文字幕| 日韩一级高清毛片| 国产一区二区中文字幕| 欧美激情艳妇裸体舞| 成人黄色软件下载| 亚洲欧美日韩电影| 欧美亚日韩国产aⅴ精品中极品| 亚洲.国产.中文慕字在线| 在线综合亚洲欧美在线视频 | 国产性天天综合网| 国产精品1区二区.| 中文字幕一区二区三区在线不卡 | 色老汉av一区二区三区| 亚洲综合色成人| 欧美一区二区三区思思人| 国产一区二区三区在线观看精品| 久久久777精品电影网影网 | 色菇凉天天综合网| 天使萌一区二区三区免费观看| 91精品国产乱码| 国产剧情一区二区| 亚洲色图清纯唯美| 欧美精品123区| 国产成人福利片| 亚洲资源中文字幕| 日韩欧美一级二级三级| 夫妻av一区二区| 亚洲成人免费在线观看| 精品国产乱码久久久久久闺蜜| 99热在这里有精品免费|