SQL 高階・交叉表、CTE 與分組前幾名
這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。
- 01
條件聚合-種類交叉表
中等做一張「產地 × 種類」的交叉表:每個產地一列,欄位依序為產地名稱、點心數、飲料數、調味品數。
表頭命名為 '產地'、'點心'、'飲料'、'調味品'。只列出有食品的產地,依產地名稱排序。
提示:SUM(CASE WHEN 條件 THEN 1 ELSE 0 END) 可以只計算符合條件的列。
資料表
food:id編號(文字,主鍵)、name名稱(文字)、expiredate到期日(文字,格式 'YYYY-MM-DD')、placeid產地編號(文字)、price價格(整數)、catalog種類(文字)。資料表
place:id產地編號(文字,主鍵)、name產地名稱(文字)。作答登入後可作答 - 02
CTE-各產地營收占比
中等用 WITH(CTE)先算出每個產地的價格加總,再算出每個產地加總占「全部加總」的百分比(ROUND 到小數第 1 位)。
輸出產地名稱、加總、占比,表頭命名為 '產地'、'加總'、'占比',依加總由高到低排序。
提示:整數相除會捨去小數,計算前先乘以 100.0。
資料表
food:id編號(文字,主鍵)、name名稱(文字)、expiredate到期日(文字,格式 'YYYY-MM-DD')、placeid產地編號(文字)、price價格(整數)、catalog種類(文字)。資料表
place:id產地編號(文字,主鍵)、name產地名稱(文字)。作答登入後可作答 - 03
視窗函數-各產地價格前二名
困難查詢每個產地「價格最高的前 2 名」食品,輸出產地名稱、食品名稱、價格、名次(表頭 '產地'、'食品'、'價格'、'名次')。
名次用 ROW_NUMBER() 依價格由高到低計算,價格相同時以食品編號較小者在前。
結果依產地名稱、名次排序。
資料表
food:id編號(文字,主鍵)、name名稱(文字)、expiredate到期日(文字,格式 'YYYY-MM-DD')、placeid產地編號(文字)、price價格(整數)、catalog種類(文字)。資料表
place:id產地編號(文字,主鍵)、name產地名稱(文字)。作答登入後可作答

送件鴿飛出去了