學習目標:
每天2-3到簡單sql(刷完即止),每天復習代碼隨想錄上的題目3道算法(時間充足可以繼續),今天的八股背少一點,MySQL和Redis各1-2道好了,主攻復習是java基礎
今日碎碎念:
1)今天刷SQL以及復習Java基礎,就不寫算法了,另外就是復習之前的八股
力扣刷題
SQL
力扣1873:1873. 計算特殊獎金
解答思路:
? ? ? ? 1)本題練習的主要是如何使用正則表達式以及在查詢中使用If,當然,也可以使用模糊查詢和取余都是可以的
# 計算每個雇員的獎金。如果一個雇員的 id 是 奇數 并且他的名字不是以 'M' 開頭
# 那么他的獎金是他工資的 100% ,否則獎金為 0
select employee_id,IF(employee_id % 2 = 1 AND name NOT REGEXP '^M', salary, 0) as bonusfrom Employeesorder by employee_id
這里直接粘上評論區的代碼了
selectemployee_id,if(employee_id%2=1 and name not like 'M%',salary,0) as bonus
from employees
order by employee_id;作者:隨遇而安
鏈接:https://leetcode.cn/problems/calculate-special-bonus/solutions/2051411/by-sui-yu-er-an-xw-2tpr/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
還有就是可以使用MOD函數
Mod(a,b) 在sql中的意思是 a % b
Mod基礎用法:如果id需要是偶數或者奇數時就可以使用mod。
mod(id,2)=1 是指id是奇數。
mod(id,2)=0 是指id是偶數。
力扣1667:1667. 修復表中的名字
解答思路:
? ? ? ? 1)本題練習到基礎函數的使用,同時也是一道練習自連接的好題目
? ? ? ? 2)限制精度到小數點后幾位,我也記錄了好幾道題了,就是使用round即可
# 數據都在同一列,我們無法進行計算,因此要想辦法讓需要的數據體現在一行
# 因此得自連接
select a1.machine_id,round(avg(a2.timestamp - a1.timestamp),3) as processing_timefrom Activity as a1 join Activity as a2ona1.machine_id=a2.machine_id and a1.process_id=a2.process_id anda1.activity_type ='start' and a2.activity_type ='end' group by machine_id