mysql多行變多列(衍生形式)
我的這篇文章整理了mysql多行變多列的2種常見形式:http://blog.csdn.net/rainyspring4540/article/details/50231435
這裡就不贅述了,下面說下它更復雜的衍生形式:
表結構:
create table student ( name varchar(20) not null, -- 姓名 course varchar(20) not null,-- 科目 score int ,-- 成績 bossEvaluate varchar(20),-- 校長評估 familyEvaluate varchar(20),-- 家族評估 societyEvaluate varchar(20), -- 社會評估 primary key(name,course) ); insert into student values('小王','數學','10','A','B','C'); insert into student values('小王','語文','20','A','B','C'); insert into student values('小王','英語','30','A','B','C'); insert into student values('小花','數學','10','A','A','A'); insert into student values('小花','語文','40','A','A','C'); insert into student values('小花','英語','10','A','B','C'); insert into student values('小虎','數學','25','C','B','C'); insert into student values('小虎','語文','10','A','C','C'); insert into student values('小虎','英語','10','A','B','C');
形如:
下面的是一般的生成展現和sql,貼出來就不贅述了:
SELECT name ,max(if(course='數學',score,0)) as '數學' ,max(if(course='語文',score,0)) as '語文' ,max(if(course='英語',score,0)) as '英語'
FROM ds_wjytest2.student group by name;
我這裡用的是if不是case when,其實效果都差不多;
下面是更復雜點的衍生展現和sql:
SELECT name , max(if(course='數學',score,0)) as '數學' ,max(if(course='數學',bossEvaluate,null)) as '校長評估' ,max(if(course='數學',familyEvaluate,null)) as '家族評估' ,max(if(course='數學',societyEvaluate,null)) as '社會評估', max(if(course='語文',score,0)) as '語文' ,max(if(course='語文',bossEvaluate,null)) as '校長評估' ,max(if(course='語文',familyEvaluate,null)) as '家族評估' ,max(if(course='語文',societyEvaluate,null)) as '社會評估', max(if(course='英語',score,0)) as '英語' ,max(if(course='英語',bossEvaluate,null)) as '校長評估',max(if(course='英語',familyEvaluate,null)) as '家族評估' ,max(if(course='英語',societyEvaluate,null)) as '社會評估' FROM ds_wjytest2.student group by name;
是不是感覺if函式很好用。。。有些領導就喜歡這種冗長的報表,順便說下:如果是大資料匯出這樣結構的資料,最好不要使用這個語句,如果資料量太大(10w),或者類似這樣的伴隨分類欄位(這裡科目是分類欄位)的延伸欄位(家長評價、社會評價、小校長評價)太多會是效能極速下降;
我測試解決大資料匯出這樣結構採用分頁匯出(帶排序欄位),並且每次分頁讀取時先快取一部分基本表的資訊,由於是帶排序的,所有快取的命中率很高;已經命中的清除快取,未命中的庫裡讀取這個記錄,並在此讀入一部分資訊到快取(細節以後單寫篇文章。。。)
相關推薦
mysql多行變多列(衍生形式)
我的這篇文章整理了mysql多行變多列的2種常見形式:http://blog.csdn.net/rainyspring4540/article/details/50231435 這裡就不贅述了,下面說下它更復雜的衍生形式: 表結構: create table studen
JQuery show hide屬性不起作用或控制多行tr顯示隱藏(已解決)
1.表單中你可能要控制多行tr td 顯示或者隱藏,但是在每個tr上面加id屬性又顯得很笨,其他table什麼的並沒什麼用那麼關鍵的解決辦法來了,你只需要一個<tbody></tbody>。 <tbody id="sl"> <tr
mysql 多行轉多列
開發十年,就只剩下這套架構體系了! >>>
makefile之命令包&多行變量
expand close 部分 code gin like clas pro 簡單使用 define&endef 1. 命令包(canned recipes)&多行變量(muti-line variables) The define directive i
多行html建議用()包裹
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &l
Mysql多表查詢詳解(初學者適用)
-- ------------------ ######多表查詢##-- join用於把來自兩個或多個表的行結合起來。-- INNER JOIN:如果表中有至少一個匹配,則返回行-- LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行-- RIGHT JOIN:即使
多行變一行 xargs
https://blog.csdn.net/hjxhjh/article/details/17264739 1. 採用awk awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file  
PostgreSQL 多行變一行
例項表: postgres=# \d book2 Table "public.book2" Column | Type
Filebeat 關鍵字多行匹配日誌採集(multiline與include_lines)
很多同事認為filebeat採集日誌不能做到多行處理,今天這裡討論下filebeat的multiline與include_lines。先來個案例,以下日誌,我們只要求採集error的欄位,2017/06/22 11:26:30 [error] 26067#0: *17918
SQL多行轉多列
表內容: 姓名 課程 分數 張三 語文 74張三 數學 83張三 物理 93張三 德語 null李四 語文 74李四 數學 84李四 物理 94李四 英語 80想變成(得到如下結果): 姓名 語文 數學 物理 英語 德語---- ---- ---- ----李四 74
Hive中“一行變多行”、“多行合成一行”的實現例項
Ø 一行變多行過程: // 一行拆分多行的操作:主要是拆分subcat不為空的記錄,sql語句如下: insert into table today_cust_behavior_single select msisdn ,flow_start,flow_end,kk as subcat from toda
行列轉換之——多行轉多列,多列轉多行實踐版
多行 max 演示 spa info 思想 .com 要求 列轉行 行列轉換之——多行轉多列,多列轉多行實踐版 1、多列轉行(核心思想,利用row_number() over() 來構造列傳行之後的唯一列,來行轉列) 要求: 實操演示: select
多行轉多列,行數和列數不確定
原始需求,有2表如下 SQL> select * from mas; TO TOOLNAME -- ---------- 01 包裹 02 信函 03 掛號信 04 中國速遞 05 EMS 06 DHL 6 rows selected. SQL> select * from putdt; SEN
oracle 多行轉一列,一列轉多行
select t.rank, t.Name from t_menu_item t; 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 20 SCOTT 2
postgresql 查詢結果 多行變一行
1.SELECT a.id, a.db_name, string_agg(b.username, ',') FROM tbl_company a, tbl_user b WHERE a.id = b.company_id group by a.id 查詢欄位只能是字元型
第一行程式碼系列第二章——更多隱式Intent用法(開啟網頁)
效果圖 修改FirstActivity中按鈕事件 Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new OnClickListener() {
ospf多區域的創建(華為)
信息 接口 proc borde 華為 order 防止 傳播 5.0 OSPF 多區域配置 ABR:area border router ,區域邊界路由器 -作用 實現不同區域之間的互通; -定義 同時連接骨幹區域和非骨幹
Maven的pom.xml文件結構之基本配置packaging和多模塊聚合結構(微服務)
second maven項目 支持 其中 jar maven 所有 了解 ack 1. packaging packaging給出了項目的打包類型,即作為項目的發布形式,其可能的類型。在Maven 3中,其可用的打包類型如下: jar,默認類型 war ejb ear r
多線程學習-基礎(十二)生產者消費者模型:wait(),sleep(),notify()實現
都是 exce 生產 runnable 下午 util 庫存 jason 最大 一、多線程模型一:生產者消費者模型 (1)模型圖:(從網上找的圖,清晰明了) (2)生產者消費者模型原理說明: 這個模型核心是圍繞著一個“倉庫”的概念,生產者消費者都是圍繞著:“倉庫”
多線程-生產者消費者(BlockingQueue實現)
insert inter exceptio ted 不同的 方法 nta 條件 -i 三、采用BlockingQueue實現 BlockingQueue也是java.util.concurrent下的主要用來控制線程同步的工具。 BlockingQueue有四個具體的實現類