晚上回來,同學說面試遇到了一個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;
結果: