【面試題】
有一張“課程銷售訂單表”,包含4個字段:用戶id、下單日期、下單id、學科。
問題:查詢每個用戶第一個訂單的記錄,如果同時下單了包含多個課程的訂單,則按照“語文、數學、英語”順序排序。
【解題步驟】
1. 彙總分析
查詢“每個用戶第一個訂單”,涉及到“每個”,要想到《猴子 從零學會SQL》裏講過的要用“分組彙總”解決該類問題。按用戶id分組(group by),第一個訂單的記錄是指“下單日期”這一列最小的值(彙總用min函數)
查詢結果:
2. 多表聯結
上面只獲取到第一次下單用戶的用戶id、第一次下單日期。而題目要求如果同時下單了包含多個課程的訂單,則按照“語文、數學、英語”順序排序。
這就要獲取到表裏的其它數據。可以把上面查詢結果作爲表a1,和“課程銷售訂單表”(記爲表a2)進行多表聯結。
使用多表聯結,查詢每個用戶第一個訂單的記錄:
查詢結果:
3. 自定義排序
按照“語文、數學、英語”順序排序,涉及到自定義排序:order by field()的使用。
【本題考點】
1.涉及到“每個”的問題,要想到《猴子從零學會SQL》裏講過的用“分組彙總”或者“窗口函數”來解決
2.考查對多表聯結的應用
3.考查對order by中自定義排序的使用