1. 程式人生 > >mysql多行變多列(衍生形式)

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有四個具體的實現類