oracle - mysql如何將group by的行數據轉為列
問題描述
原始數據表如下
idnamemoneytime1mike62016-09-01 12:58:002mike102016-09-01 13:52:563leo102016-09-02 00:05:054mike62016-09-03 08:06:05希望轉制后的數據表如下
name2016-09-012016-09-022016-09-03mike1606leo0100以demo為例,可以說說這類問題的解決思路嗎?比如統計兩個月的數據,那么就會有60行轉為60列,是否存在效率的瓶頸
問題解答
回答1:select sum(money) s,name,date_format(time,’%Y-%m-%d’) d from table group by name,d;然后根據這里轉換
回答2:非要用sql做的話,得寫存儲過程,然后創建個臨時表了。沒必要,把數據取出來后用服務端去做吧。效率高很多。
回答3:create table tt1(id int ,name VARCHAR(100),money FLOAT,time DATETIME)insert into tt1select 1,’mike’,6,’2016-09-01 12:58:00’ UNIONselect 2,’mike’,10,’2016-09-01 13:52:56’ UNIONselect 3,’leo’,10,’2016-09-02 00:05:05’ UNIONselect 4,’mike’,6,’2016-09-03 08:06:05’select name,sum(case when datediff(time,’2016-09-01’)=0 then money else 0 end) as ’2016-09-01’ ,sum(case when datediff(time,’2016-09-02’)=0 then money else 0 end) as ’2016-09-02’ ,sum(case when datediff(time,’2016-09-03’)=0 then money else 0 end) as ’2016-09-03’from tt1 GROUP BY name回答4:
@ch21st 給的就是典型的行轉列SQL寫法因為只需要表掃描一次,因此一般情況下不存在性能問題,除非是特別大的表。
這種寫法本身只是一個解決思路,如果列不固定的話,可以在應用端通過php或java動態生成sql語句。
回答5:寫個生成腳本的sql就完了嘛
select 'select name,' union select concat('sum(case when datediff(time,’',date(time),'’)=0 then money else 0 end) as ’',date(time),'’,') a from tt1 group by a union select ' from tt1 group by name;';PS:union中間段最后一個逗號記得去掉回答6:
SELECT name, sum( if(date_format(time,’%Y-%m-%d’) = ’2016-09-01’, money, 0 ) ) AS ’2016-09-01’, sum( if(date_format(time,’%Y-%m-%d’) = ’2016-09-02’, money, 0 ) ) AS ’2016-09-02’, sum( if(date_format(time,’%Y-%m-%d’) = ’2016-09-03’, money, 0 ) ) AS ’2016-09-03’FROM money_table GROUP BY name;
相關文章:
1. [前端求職必看]前端開發面試題與答案精選_擴展問題2. javascript - 在top.jsp點擊退出按鈕后,right.jsp進行頁面跳轉,跳轉到login.jsp3. javascript - 下面的這段算法代碼求解釋4. mac連接阿里云docker集群,已經卡了2天了,求問?5. css3 - 在sublime text里, 如何讓emmet生成的帶前綴css屬性垂直對齊?6. javascript - js 有什么優雅的辦法實現在同時打開的兩個標簽頁間相互通信?7. java - spring-data Jpa 不需要執行save 語句,Set字段就可以自動執行保存的方法?求解8. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點9. javascript - angular中如何創建一個能被不同模塊中組件都能訪問其屬性和方法的對象10. 想找個php大神仿個網站。
