一道SQL面試例題 if...else 與聚集函數


晚上回來,同學說面試遇到了一個SQL面試題目,自己做了一下,總結總結。

題目如下:

  下面是產品數據表(產品id,顏色col,數量num),其中每種產品有1~2種顏色。

  求每種產品各顏色的數量差值(對於只有一種顏色的保留產品總數)

        

解法如下:

1.先求出每種產品各顏色的數量

  這個不難,直接使用group by 就可以啦。SQL語句如下:

 1 select id,col,sum(num) total from chanpin group by id,col 

  結果:

    

2.求每種產品各顏色的數量差值(對於只有一種顏色的保留產品總數)

   因為每種產品只有1~2中:

  (1)如果有兩種,結果就是顏色多的產品數量 - 顏色少的產品數量;

  (2)如果有一種,結果就是這種顏色的產品數量。

  SQL語句如下:

1 select A.id ,if(
2                 count(*) >1,    #判斷條件,顏色數量
3                 max(A.total) - min(A.total),    #顏色多的產品數量 - 顏色少的產品數量
4                 max(A.total)    #產品數量
5                ) dis
6 from (
7         select id,col,sum(num) total from chanpin group by id,col
8      )  A 
9 group by A.id;

  結果:

    


免責聲明!

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



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