婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL 中行轉列的方法

MySQL 中行轉列的方法

熱門標簽:房產智能外呼系統品牌 常州電銷外呼系統一般多少錢 沃克斯電梯外呼線路圖 地圖標注被騙三百怎么辦 云南語音外呼系統平臺 天智外呼系統 北京人工外呼系統價錢 400電話鄭州申請 福州呼叫中心外呼系統哪家好

MySQL行轉列操作

    所謂的行轉列操作,就是將一個表的行信息轉化為列信息,說著可能比較籠統,這里先舉個例子,如下:

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

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

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

1 case when操作方法

    要實現上面的功能,我們需要進行分析,首先,我們需要生成三個列,分別是數學,語文和英語,然后給每個列中的值填入對應的數據。這里需要用到mysql的case when then end操作,也就是條件操作,關于這個條件語句,首先我們給出解釋:

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

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

    現在開始試驗:

    首先我們創建一張表,并插入如下數據:

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

    根據上面case when語法,當碰到課程為'數學'的時候,我們定義一個列'數學',并把它的score填入其中,如果碰到'語文'或者'英語',那么把它替換為0,我們可以先籠統的寫出如下SQL:

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

    我們發現上面的表只有兩個列,根據SQL規則,我們可以把'語文'和'英語'的值也加入進去,一次性多寫幾個列,如下:

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

    這下好了,我們有了所有的記錄了,已經快要達到我們的目的了,看看和最終結果的差距:

+-----------+--------+--------+--------+
| user_name | 數學  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   |   |   |
| 李四   |   |   |   |
| 王五   |   |   |   |
+-----------+--------+--------+--------+

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

    下面我們給出最終結果:

mysql-yeyz 13:55:52>>SELECT user_name ,
  ->   MAX(CASE course WHEN '數學' THEN score ELSE END ) 數學,
  ->   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 | 數學  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   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 '數學' THEN score ELSE END ) 數學,
  ->   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 | 數學  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   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 '數學' THEN score ELSE END ) 數學,
  ->   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 | 數學  | 語文  | 英語  |
+-----------+--------+--------+--------+
| 張三   |   0 |   0 |   0 |
| 李四   |   0 |   0 |   0 |
| 王五   |   0 |   0 |   0 |
+-----------+--------+--------+--------+
3 rows in set (0.00 sec)

     可以看出來,使用MAX和使用SUM的結果是一樣的,但是使用MIN作為聚合函數,會導致最終輸出的結果都是0,因為每次都選的是該user_name指定學科的最小的值,也就是0。這樣的結果就很好理解了。

2 if操作方法

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

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

3 添加total列

    當我們把基本的行轉列實現之后,我們現在需要在轉換之后的表上面添加一個total字段,這個字段的添加我們可以通過下面的方法,即在最開始統計的時候,就把score值也統計進去,如下:

mysql-yeyz 14:18:06>>SELECT user_name ,
  ->   (CASE course WHEN '數學' THEN score ELSE END ) 數學,
  ->   (CASE course WHEN '語文' THEN score ELSE END ) 語文,
  ->   (CASE course WHEN '英語' THEN score ELSE END ) 英語,
  -> (score) total
  -> FROM test_tbl;
+-----------+--------+--------+--------+-------+
| user_name | 數學  | 語文  | 英語  | 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)

    上面的結果是沒有聚合后的結果,這里需要注意的是,如果我們要聚合,前三個列可以使用sum或者max的方法,最后一個列一定要使用sum的方法,因為我們要求的是總成績,使用max的方法會導致取值變為分數最高的那個值。最后的sql如下:

mysql-yeyz 14:18:29>>SELECT user_name ,
  ->   sum(CASE course WHEN '數學' THEN score ELSE END ) 數學,
  ->   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 | 數學  | 語文  | 英語  | total |
+-----------+--------+--------+--------+-------+
| 張三   |   34 |   58 |   58 |  150 |
| 李四   |   45 |   87 |   45 |  177 |
| 王五   |   76 |   34 |   89 |  199 |
+-----------+--------+--------+--------+-------+
3 rows in set (0.00 sec)

4 簡單方法 group_concat

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

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

    這種方法相當于直接針對原始表做了一個分組,也能夠應付一定的應用場景。

以上就是MySQL 中行轉列的方法的詳細內容,更多關于MySQL 行轉列的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MySQL中將一列以逗號分隔的值行轉列的實現
  • 當Mysql行鎖遇到復合主鍵與多列索引詳解
  • Mysql 相鄰兩行記錄某列的差值方法
  • mysql指定某行或者某列的排序實現方法
  • mysql 列轉行,合并字段的方法(必看)
  • mysql列轉行以及年月分組實例
  • mysql 列轉行的技巧(分享)
  • mysql 行轉列和列轉行實例詳解
  • mysql 行列動態轉換的實現(列聯表,交叉表)
  • 數據庫實現行列轉換(mysql示例)

標簽:移動 黔東 拉薩 珠海 徐州 沈陽 沈陽 鹽城

巨人網絡通訊聲明:本文標題《MySQL 中行轉列的方法》,本文關鍵詞  MySQL,中行,轉列,的,方法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 中行轉列的方法》相關的同類信息!
  • 本頁收集關于MySQL 中行轉列的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    97国产一区二区| 日韩一区二区视频| 欧美一区二区视频观看视频| 国产欧美一区二区精品性色超碰| 亚洲日本丝袜连裤袜办公室| 青草av.久久免费一区| 91丨九色丨黑人外教| 欧美精品一区二区三区蜜桃| 亚洲线精品一区二区三区| 国产91综合一区在线观看| 欧美一区三区二区| 一区二区三区在线视频免费观看| 国产九色精品成人porny| 91精品国产综合久久精品| 亚洲乱码国产乱码精品精98午夜 | 久久婷婷成人综合色| 午夜在线成人av| 色综合天天综合| 日韩一区日韩二区| 91在线播放网址| 国产精品精品国产色婷婷| 国产a精品视频| 久久婷婷久久一区二区三区| 国产一区免费电影| 欧美videos中文字幕| 蜜桃一区二区三区在线| 91精品国产aⅴ一区二区| 亚洲大片一区二区三区| 欧美日韩你懂得| 午夜视黄欧洲亚洲| 欧美久久久久久久久中文字幕| 亚洲午夜精品久久久久久久久| 在线看日韩精品电影| 亚洲欧美国产三级| 91成人在线观看喷潮| 亚洲电影欧美电影有声小说| 欧美日韩一级二级| 三级一区在线视频先锋| 91精品国产丝袜白色高跟鞋| 麻豆国产欧美日韩综合精品二区| 精品日韩欧美在线| 粉嫩aⅴ一区二区三区四区| 中文字幕精品一区二区精品绿巨人 | 一区二区三区日韩精品视频| 91久久奴性调教| 亚洲成av人片在线| 欧美妇女性影城| 激情国产一区二区| 国产精品久久久久四虎| 91免费国产在线| 午夜精品久久久久久久久久 | 91.com视频| 精品中文字幕一区二区| 国产日韩亚洲欧美综合| 一本色道久久综合亚洲91| 三级一区在线视频先锋| 久久精品亚洲一区二区三区浴池| 波多野结衣视频一区| 亚洲综合一二区| 欧美精品一区二区久久久| 91蝌蚪porny九色| 青青草原综合久久大伊人精品| 欧美国产乱子伦| 欧美日韩另类国产亚洲欧美一级| 国产美女一区二区| 亚洲成人精品一区| 国产欧美日韩在线视频| 欧美日韩你懂得| 国产精品一区二区黑丝| 亚洲一区电影777| 国产精品网站在线观看| 欧美天天综合网| 不卡的av在线播放| 日本强好片久久久久久aaa| 国产精品高清亚洲| 日韩精品中文字幕在线一区| 91网址在线看| 国产一区二区三区日韩| 五月天欧美精品| 亚洲欧美激情在线| 国产欧美视频一区二区| 日韩欧美国产电影| 欧美日韩美女一区二区| 99re66热这里只有精品3直播 | 一区二区理论电影在线观看| 欧美精品一区二区蜜臀亚洲| 欧美日韩精品是欧美日韩精品| 成人天堂资源www在线| 日韩中文字幕不卡| 亚洲电影一级片| 一区二区在线观看免费| 中文字幕电影一区| 国产欧美精品一区二区色综合 | 色偷偷久久一区二区三区| 国产最新精品精品你懂的| 日韩av电影天堂| 五月天精品一区二区三区| 一区二区三区色| 亚洲免费av观看| 亚洲日本va午夜在线影院| 国产精品私房写真福利视频| 久久久蜜臀国产一区二区| 精品欧美一区二区久久| 日韩三级视频在线看| 欧美日韩国产成人在线91| 欧洲一区二区三区免费视频| 99久久精品国产一区二区三区| 国产激情91久久精品导航| 韩国中文字幕2020精品| 久久99精品国产| 国产一区欧美二区| 国产麻豆9l精品三级站| 国内精品久久久久影院色| 狠狠色丁香久久婷婷综| 国产高清在线精品| 成人黄色777网| 色婷婷综合五月| 欧美无人高清视频在线观看| 91久久精品一区二区三区| 欧美日韩一区视频| 日韩午夜精品电影| 亚洲精品在线免费播放| 国产三级精品视频| 国产精品国产三级国产普通话三级| 国产精品久久夜| 一区二区三区欧美久久| 婷婷丁香久久五月婷婷| 欧美aaaaaa午夜精品| 粉嫩av亚洲一区二区图片| 一本色道久久加勒比精品 | 亚洲色图清纯唯美| 亚洲影视在线观看| 蜜臀久久99精品久久久久宅男| 激情偷乱视频一区二区三区| eeuss鲁片一区二区三区| 欧美艳星brazzers| 精品国产区一区| 国产精品白丝在线| 首页国产欧美日韩丝袜| 国产精品中文字幕日韩精品| 91在线免费看| 日韩无一区二区| 国产精品高潮呻吟| 免费在线一区观看| 不卡av在线网| 欧美福利电影网| 国产精品久久久久久久久免费樱桃| 亚洲福利视频三区| 高清在线不卡av| 91精品国产综合久久香蕉的特点| 国产欧美一区二区精品忘忧草 | 亚洲精品一区在线观看| 亚洲欧美日韩一区二区| 七七婷婷婷婷精品国产| 色综合色综合色综合| 久久久99精品免费观看不卡| 亚洲一区在线观看免费| 国产成人免费视频网站| 欧美成人精品二区三区99精品| 一区二区三区中文字幕精品精品 | 国产精品午夜久久| 午夜精品一区在线观看| 北条麻妃一区二区三区| 久久尤物电影视频在线观看| 午夜欧美2019年伦理| 91年精品国产| 国产精品二三区| 国产九色sp调教91| 精品国产3级a| 美脚の诱脚舐め脚责91| 欧美日韩一区二区在线视频| 18成人在线视频| 国产一区啦啦啦在线观看| 欧美电视剧在线看免费| 日韩激情视频在线观看| 欧美亚洲综合在线| 一级日本不卡的影视| 91在线码无精品| ...av二区三区久久精品| 国产69精品久久777的优势| 国产亚洲欧美激情| 国产一区二区三区四区在线观看| 日韩一区二区免费电影| 视频一区国产视频| 欧美日韩一区二区在线观看| 亚洲午夜精品在线| 欧美日韩情趣电影| 天天操天天综合网| 337p亚洲精品色噜噜| 秋霞av亚洲一区二区三| 91精品欧美福利在线观看| 午夜精品久久久久久不卡8050| 精品视频一区二区三区免费| 亚洲国产成人porn| 欧美电影在线免费观看| 日本一区中文字幕| 欧美成人猛片aaaaaaa| 国产黄色精品视频| 亚洲人成网站在线| 欧美视频一区二区|