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