復(fù)盤一下前兩天MySQL的一道筆試題。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、王益網(wǎng)絡(luò)推廣、成都小程序開發(fā)、王益網(wǎng)絡(luò)營銷、王益企業(yè)策劃、王益品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供王益建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:chinadenli.net
建表語句為:
這是典型的行轉(zhuǎn)列操作。方法有以下兩種:
注意:max() 是為了能夠使用 group by 根據(jù) id 進(jìn)行分組,因?yàn)槊恳粋€(gè) id 對應(yīng)的course = '語文' 的記錄只有一條,所以 max() 的值就等于對應(yīng)那一條記錄的 score 的值。 因此sum()、min()、avg()等聚合函數(shù)都可以達(dá)到行轉(zhuǎn)列的效果。
若要實(shí)現(xiàn)對每一列也求和,可以使用with rollup直接生成結(jié)果。
列轉(zhuǎn)行:利用max(case when then)
`max``---聚合函數(shù) 取最大值`
`(`case course when '語文' then score else 0 end ) ---判斷`
` as 語文``---別名作為列名`
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 在第一個(gè)方案的返回結(jié)果中, value=compare-value。而第二個(gè)方案的返回結(jié)果是第一種情況的真實(shí)結(jié)果。如果沒有匹配的結(jié)果值,則返回結(jié)果為ELSE后的結(jié)果,如果沒有ELSE 部分,則返回值為 NULL。
mysql SELECT CASE 1 WHEN 1 THEN 'one'
- WHEN 2 THEN 'two' ELSE 'more' END;
- 'one'
mysql SELECT CASE WHEN 10 THEN 'true' ELSE 'false' END;
- 'true'
mysql SELECT CASE BINARY 'B'
- WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
- NULL
你用case when 函數(shù)試試。
打字不易,如滿意,望采納。
就是一個(gè)動(dòng)態(tài)的行列轉(zhuǎn)換
CREATE TABLE `c_wssb_zz` (
`aa011` varchar(10) default NULL,
`aa001` varchar(20) default NULL,
`aa014` varchar(20) default NULL,
`aa015` varchar(200) default NULL,
`aab001` varchar(20) default NULL,
`aa010` varchar(30) default NULL,
`aae216` date default NULL,
`aa013` varchar(3) default NULL,
`aa016` varchar(10) default NULL,
`aae218` date default NULL,
`aab034` varchar(20) default NULL,
`aab901` varchar(255) default NULL
)
加入這是要轉(zhuǎn)換的表,表名不確定,作為一個(gè)參數(shù), aab001、AA011這兩個(gè)也不確定,也是參數(shù),顯示的結(jié)果把AA014這一列的內(nèi)容橫過來內(nèi)容,對應(yīng)AA015, 最后形成的數(shù)據(jù)格式如下
AAB034,AA011,AA001,AAB001,max(case when aa014='col1' then aa015 else '' end)as col1,max(case when aa014='col2' then aa015 else '' end)as col2,....max(case when aa014='colN' then aa015 else '' end)as colN,AAE216,AAE218,AA013,AA016
mysql查詢含逗號(hào)的數(shù)據(jù),將逗號(hào)拆分為多行展示:
原始數(shù)據(jù)如下:
現(xiàn)在因?yàn)樾碌男枨螅枰獙⑦@些數(shù)據(jù)轉(zhuǎn)化為如下形式:
假設(shè)我們需要處理的表結(jié)構(gòu)為:
使用如下sql語句即可實(shí)現(xiàn)需求:
查詢的主要思路為,原表與一個(gè)包含連續(xù)自增長字段的表進(jìn)行join,得到字符串分隔后的索引值,其中 length( a.name ) - length( REPLACE ( a.name, ',', '' ) ) + 1 語句獲得字符串逗號(hào)分隔之后得到的數(shù)據(jù)長度,兩表關(guān)聯(lián)之后,會(huì)得到相應(yīng)行數(shù)的數(shù)據(jù)。比如,
在join之后會(huì)得到:
之后對查詢中的結(jié)果,使用substring_index方法進(jìn)行截取,然后得到我們自己想要的數(shù)據(jù)。
網(wǎng)站欄目:mysql行列怎么轉(zhuǎn),mysql行轉(zhuǎn)列sql
標(biāo)題鏈接:http://chinadenli.net/article26/dsejdjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、搜索引擎優(yōu)化、動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)