SQL語句的使用技巧--02(MYSQL 行轉列,序列號,刪除重複數據)

目錄

 

1.行轉列,列轉行

2.如何生成唯一序列號

3.如何刪除重複數據


 

1.行轉列,列轉行

  場景1:報表統計,彙總顯示

  • 1.報表統計

             

  •  2.彙總顯示

             

    練習:

   

     實現的方法:

  •  1.使用自連接的方式實現行轉列(效率不高,複雜,難擴展)

         

        還有一個是統計每個學生所有課程的總成績:首先最先想到的是查詢到每個學生所有課程的總和。

SELECT b.STUDENT_NAME,SUM(a.CORE) 
FROM hand_student_core a 
RIGHT JOIN hand_student b ON a.STUDENT_NO=b.STUDENT_NO
GROUP BY b.STUDENT_NO

  

   然後實現行轉列


SELECT * FROM(

SELECT SUM(a.CORE) AS 張三 FROM hand_student_core a JOIN hand_student b  ON a.STUDENT_NO=b.STUDENT_NO
WHERE b.STUDENT_NAME='張三') a
CROSS JOIN (
SELECT SUM(a.CORE) AS 李四 FROM hand_student_core a JOIN hand_student b  ON a.STUDENT_NO=b.STUDENT_NO
WHERE b.STUDENT_NAME='李四') b
CROSS JOIN (
SELECT SUM(a.CORE) AS 吳鵬 FROM hand_student_core a JOIN hand_student b  ON a.STUDENT_NO=b.STUDENT_NO
WHERE b.STUDENT_NAME='吳鵬') c

  •    2.使用case來行轉列。
SELECT SUM(CASE WHEN STUDENT_NAME='張三' THEN CORE END ) AS 張三,
			SUM(CASE WHEN STUDENT_NAME='李四' THEN CORE END) AS 李四,
			SUM(CASE  WHEN  STUDENT_NAME='吳鵬' THEN CORE END) AS 吳鵬
 FROM hand_student_core a JOIN hand_student b on a.STUDENT_NO=b.STUDENT_NO

  

場景二:還有一種行轉列的形式是一列轉換爲多行,比如:

   

     

     方式一:使用序列表的方式完成行列轉換。

     首先生成一個序列號表,就一個自增id字段

    初始化序列表:就是一個整數序列

    

 

  結果:

  

  分析:子查詢sql

  

 

   行數根據size來決定

   場景三:

 一個一個的顯示,再union:

 

  

 

2.如何生成唯一序列號

    場景: 

    

     

      

       第一種方式需要允許序列空洞的存在,因爲數據庫回滾了以後就會出現空洞

       

          

          

        

3.如何刪除重複數據

    

     

    判斷用戶名是否有重複:

    

    

      

        

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章