sql怎麼select中位數 SQL刷題經驗總結

2021-10-11 03:26:07 字數 2079 閱讀 8643

0.對應的原始題目和完整題解可見gitub,上面還有自己現在在做的leetcode熱題top100,基於c++,有需要的可以star一下,歡迎交流。

從leetcode上刷了一些資料庫的題目,題目的方法和技巧總結如下:

1.涉及排名多少的問題

對於給乙個單錶(工資表)去挑選前三高工資的員工,核心的做法是,從該表中選出一條資料之後,將該資料在另外乙個表中去比較有幾條資料比該資料大,從而推斷出該資料的排名,核心的**示意如下:

select
對於列出排名的題目,也有類似的做法

select
2.join的用法

預設的join為inner join,還有left,right,outer等,對於這些方法,可以看下面的這個圖,一目了然,根據實際需求,如果需要對其中乙個表中的缺失的資料補充null時,需要參考這個,將表中為null的資料也顯示出來。下面也出現了data_format的用法。

select
3.員工薪水中位數

這個題目就比較難了,由於中位數涉及到選擇的時候需要有奇偶數的情況分別討論,大概的做法是,先通過每個公司的人數統計,找出這幾個中位數,再把這幾個中位數對應的到薪水排名的表上,即用到排名的一般方法,就是兩個表進行join,有些複雜,是資料庫題目**現的我做過的最難的乙個。

**如下:

select
4.查詢第幾高的資料(第幾高的薪水、**等)

這種題目使用 limit 輸出個數 offset 偏移個數 的方法去做就好,速度很快。當然比如第一名就直接limit1即可,示例如下:

select
5.if函式的使用

涉及到if函式的使用,經常會搭配一些聚合函式,比如count、sum等,具體用法為if(condition, exp1, exp2),如果滿足condition則輸出為exp1,否則為exp2。注意count中不會計算null,然後sum不會計算0。

6.表join的小技巧

如果需要計算乙個表中的聚合指標,去和另外乙個表中的對比,可以選擇將查詢後的聚合指標作為乙個表與另外乙個表進行join,這樣可以在查詢過程中,呼叫另外乙個表。

7.連續出現的數字、連續出現的座位等

出現這種考察連續出現的題目,一般情況下的解決方案是通過多個表進行join來完成,比如題目考察連續3次出現,那麼你至少就要join3個表。

select
還有這個考察連續3天**量的問題。由於需要輸出是哪幾天,所以還需要考慮去重以及情況考慮全面。

select
還要注意的是日期的連續,可以用datediff(a.recorddate, b.recorddate) = 1來表示。

三天的麻煩一些,但是兩天的比較簡單,也展示一下。

select
8.如果涉及到刪除,可以先select需要刪除的內容,再將select變為select即可。

9.涉及到序號變換的問題的題目

涉及到序號變換的問題的題目,比如交換位置等,可以直接在select的時候,對序號的內容做條件判斷並進行變換。

select
10.如果補充不在範圍內的資料

可以考慮用union進行資料的補充,然後select後面可以直接補充相關需要填補的內容,null或者其他數字。

select
11.子查詢相關方法

子查詢可以用在很多地方,子查詢的結果是乙個資料表,可以用在in後面,也可以作為乙個表進行join,示例如下:

select
同時,子查詢的結果如果是乙個數的話,也可以直接用於基本運算,這樣會寫的很長。

select

SQL計算中位數

表還是total sales新增一項 表 sql語句 select from select a1.name,a1.sales,count a2.sales sales rank from total sales a1,total sales a2 where a1.sales a2.sales or...

SQL刷題心得

題目 給定乙個 salary 表,如下所示,有 m 男性 和 f 女性 的值。交換所有的 f 和 m 值 例如,將所有 f 值更改為 m,反之亦然 要求只使用乙個更新 update 語句,並且沒有中間的臨時表。update 表名稱 set 列名稱 新值 where 列名稱 某值 update sal...

SQL每日刷題 變數定義

編寫乙個 sql 查詢,來查詢與之前 昨天的 日期相比溫度更高的所有日期的 id 查詢結果格式如下例 weather id recorddate temperature 1 2015 01 01 10 2 2015 01 02 25 3 2015 01 03 20 4 2015 01 04 30 r...