<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
天天這需求就神奇!!!!
我們以MySQL資料庫為例,來說明行轉列的實現方式。
首先,假設我們有一張分數表(tb_score),表中的資料如下圖:
然後,我們再來看一下轉換之後需要得到的結果,如下圖:
可以看出,這裡行轉列是將原來的subject欄位的多行內容選出來,作為結果集中的不同列,並根據userid進行分組顯示對應的score。通常,我們有兩種方式來實現這種轉換。
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
注意,SUM() 是為了能夠使用GROUP BY
根據userid進行分組,因為每一個userid對應的
subject="語文"的記錄只有一條,所以SUM() 的值就等於對應那一條記錄的score的值。假如userid ='001' and subject='語文'
的記錄有兩條,則此時SUM() 的值將會是這兩條記錄的和,同理,使用Max()的值將會是這兩條記錄裡面值最大的一個。但是正常情況下,一個user對應一個subject只有一個分數,因此可以使用SUM()、MAX()、MIN()、AVG()
等聚合函數都可以達到行轉列的效果。
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
注意, IF(subject='語文',score,0)
作為條件,即對所有subject='語文’的記錄的score欄位進行SUM()、MAX()、MIN()、AVG()
操作,如果score沒有值則預設為0。
列轉行是上述過程的逆過程,所以其思路也比較直觀:
按照這一思路,給出SQL實現如下:
SELECT uid, sum(if(course='語文', score, NULL)) as `語文`, sum(if(course='數學', score, NULL)) as `數學`, sum(if(course='英語', score, NULL)) as `英語`, sum(if(course='物理', score, NULL)) as `物理`, sum(if(course='化學', score, NULL)) as `化學`FROM scoreLongGROUP BY uid
查詢結果當然是預期的長表。這裡重點解釋其中的三個細節:
在每個單門課的衍生表中,例如這句:SELECT uid, ‘語文’ as course, 語文 as score,用單引號包裹起來的課程名稱是字串常數,比如語文課的衍生表中的課程名都叫語文,然後將該列命名為course;第二個用反引號包裹起來的課程名實際上是從寬表中參照這一列的取值,然後將其命名為score。
這實際上對應的一個知識點是:在SQL中字串的參照用單引號(其實雙引號也可以),而列欄位名稱的參照則是用反引號.
上述用到了where條件過濾成績為空值的記錄,這實際是由於在原表中存在有空值的情況,如不加以過濾則在本例中最終查詢記錄有10條,其中兩條記錄的成績欄位為空
最後,本例中用union關鍵字實現了多表的縱向拼接,實際上用union all更為合理,二者的區別是union會完成記錄去重;而union all則簡單的拼接,在確定不存在重複或無需去重的情況下其效率更高。
到此這篇關於SQL中如何將行轉成列的文章就介紹到這了,更多相關SQL將行轉成列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45