leetcode上sql題刷題記錄(2022-04-01)
阿新 • • 發佈:2022-04-01
511 遊戲玩法分析 I
程式碼如下:
# 自己的錯誤程式碼 select player_id,event_date as first_login from Activity group by player_id,event_date having min(event_date); # 自己改進的程式碼 select player_id, min(event_date) as first_login from Activity where player_id in (select distinct player_id from Activity) group by player_id; # 網上的程式碼 select player_id,min(event_date) first_login from Activity group by player_id;
解題思路:
先是找出題目的關鍵字 .....每位玩家.....第一次.....日期 每位玩家說明要根據玩家id分組,要用到group by 第一次,說明要獲取分組後的資料日期最小的值
548-尋找使用者推薦人
程式碼如下:
# 自己開始想到的解法 select name from customer where referee_id !=2; # 自己優化的解法 (網上說null不能直接用算術運算子進行比較) select name from customer where referee_id is null or referee_id !=2; # 網上的解決方案 (null不能參與運算,但是''可以) select name from customer where ifnull(referee_id,'')!=2; # 下面的語句同樣錯誤 null不能直接用算術運算子進行比較 比較null用 is null 或者 IS NOT NULL SELECT name FROM customer WHERE referee_id = NULL OR referee_id <> 2;
解題思路: 先抓關鍵字 不是 2 說明只需要判斷推薦人id不等於2就行了, 但是這個題有隱藏的知識點 那就是 is null 和 is not null
586-訂單最多的客戶
程式碼如下:
# 開始的想法,但是提示我不能巢狀聚合函式 select count(order_number) as num ,customer_number from Orders group by customer_number having max(num); # 因為要用max()取最大值,於是想到了倒序後取第一個值,修改的d程式碼如下 select customer_number from (select count(order_number) as num ,customer_number from Orders group by customer_number order by num desc limit 1) as c;
解題思路 : 先抓關鍵字 ...最多訂單 .... 說明要分組, 還要用到count 函式 分組是為了知道每位客戶的下單情況 count是為了得到下單最多的使用者 題目的意思是隻要一個使用者,說明還有用limit 取一個使用者出來即為 limt 1