Mysql按照字段值做分組行轉列查詢


今天做個后台服務,有個需求是批量生成一批表的數據,如果用BulkInsert會提升很大一截提交效率,但是如果用循環構造提交的Datable,則算法開銷太高,所以用這種查詢批量查出符合格式的DataTable結果集。

*思想就是將查詢列做CASE判斷值,然后放在 SELECT段中作為別名列顯示字段值,然后再根據ID分組。

下面是內層的原始查詢效果:

下面是行轉列后查詢效果如圖:

 

下面是上面兩張圖的最終查詢語句:

 1 SELECT f_gameID,SUM(score) AS totNum,
 2     SUM(CASE f_sub WHEN '01' THEN score ELSE 0 END) AS f_subject01,SUM(CASE f_sub WHEN '02' THEN score ELSE 0 END) AS f_subject02,
 3     SUM(CASE f_sub WHEN '03' THEN score ELSE 0 END) AS f_subject03,SUM(CASE f_sub WHEN '04' THEN score ELSE 0 END) AS f_subject04,
 4     SUM(CASE f_sub WHEN '05' THEN score ELSE 0 END) AS f_subject05,SUM(CASE f_sub WHEN '06' THEN score ELSE 0 END) AS f_subject06,
 5     SUM(CASE f_sub WHEN '07' THEN score ELSE 0 END) AS f_subject07,SUM(CASE f_sub WHEN '08' THEN score ELSE 0 END) AS f_subject08,
 6     SUM(CASE f_sub WHEN '09' THEN score ELSE 0 END) AS f_subject09
 7 FROM 
 8 (
 9     SELECT u.f_gameID,u.f_sub,COUNT(u.f_sub) AS score
10     FROM t_mfg_GameUserAnswers AS u
11     LEFT JOIN t_mfg_Class AS c ON u.f_gameId = c.f_gameId
12     WHERE u.f_startTime > '2015-07-20' 
13     AND u.f_endTime < '2015-07-24'
14     -- AND c.f_schoolId = 193034
15     GROUP BY u.f_gameID ,u.f_sub
16 ) AS a
17 GROUP BY f_gameID;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM