<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL練習(xí):輕輕松松,1(中等)+2(較難)

          共 2512字,需瀏覽 6分鐘

           ·

          2021-08-13 14:33

          ↑↑↑關(guān)注后"星標(biāo)"簡說Python

          人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
           簡說Python推薦 

          題目來源:??途W(wǎng)

          解答:老表

          大家好,我是老表,sql刷題繼續(xù)更新啦,后面每次遇到

          大家好,我是老表,sql刷題繼續(xù)更新啦,后面每次遇到困難題后就更新。

          今天更新3道題,1(中等)+2(較難)。

          • SQL22 統(tǒng)計(jì)各個部門的工資記錄數(shù)(中等)
          • SQL23 對所有員工的薪水按照salary降序進(jìn)行1-N的排名(較難)
          • SQL24 獲取所有非manager員工當(dāng)前的薪水情況(較難)

          SQL22 統(tǒng)計(jì)各個部門的工資記錄數(shù)

          我的思路: 需求搞清楚,就蠻簡單了,先將部門員工表和薪水表連接,然后通過部門編號分組,計(jì)算數(shù)據(jù)條數(shù),可以得出每個部門對應(yīng)的薪水記錄數(shù),然后和部門表連起來,即可獲取對應(yīng)的部門名稱了。

          我的題解:

          select a1.dept_no, b1.dept_name, a1.sum
          from (
          select a.dept_no, count(a.emp_no) as sum
          from dept_emp as a
          join salaries as b
          on a.emp_no = b.emp_no
          group by a.dept_no) as a1, departments as b1
          where a1.dept_no = b1.dept_no
          ;

          涉及知識點(diǎn):

          • 完整sql執(zhí)行順序(每天看一遍,不信記不?。?/section>
          from -> where -> group by -> having -> select -> order by -> limit
          • 窗口函數(shù)count計(jì)算分組內(nèi)數(shù)據(jù)條數(shù)
          • group by 分組

          提交結(jié)果:

          SQL23 對所有員工的薪水按照salary降序進(jìn)行1-N的排名

          我的思路: 這里正好用到之前講的窗口函數(shù)dense_rank。按題目示例我們知道,需要輸出的是按薪水降序排序,生成新的一列排序序號,相同薪水排序序號相同,且按照emp_no升序排列。

          因?yàn)樽鲞@題前一天才看了窗口函數(shù)相關(guān)內(nèi)容,所以馬上想到dense_rank,可以計(jì)算排序,相同位次一樣,如:

          數(shù)值:23 23 24 25
          排序:1 1 2 3

          我的題解:

          select emp_no, salary, dense_rank() over(order by salary descas t_rank
          from salaries
          order by t_rank,emp_no;

          涉及知識點(diǎn):

          • 完整sql執(zhí)行順序(每天看一遍,不信記不?。?/section>
          from -> where -> group by -> having -> select -> order by -> limit
          • 窗口函數(shù) dense_rank() over(order by salary desc)
          • 順便提一下:rank() 會跳位,比如還是上面的例子,排序會變成:1 1 3 4
          • 順便提一下:row_number() 直接為位置序號,比如還是上面的例子,排序會變成:1 2 3 4

          提交結(jié)果:

          其他題解:
          有點(diǎn)算法的意思了,下回給大家分析下,也歡迎大家評論區(qū)說說自己的看法。

          SQL24 獲取所有非manager員工當(dāng)前的薪水情況

          我的思路: 和之前的題目很相像,越往后會發(fā)現(xiàn),給的表越來越多,信息還是一樣,需求也一樣,這樣也更符合數(shù)據(jù)庫范式。這里我直接從dept_emp和salaries中取出所需數(shù)據(jù),去除部門經(jīng)理即可,類似把現(xiàn)在的散表合并成之前的寬表,這里沒有用到employees表,根據(jù)需求確實(shí)不需要。

          我的題解:

          -- employees 員工信息表
          -- dept_emp 部門員工關(guān)系表
          -- dept_manager 部門經(jīng)理信息表
          -- salaries 員工薪水表

          select a.dept_no, a.emp_no, b.salary
          from dept_emp as a,salaries as b
          where a.emp_no not in (select emp_no from dept_manager)
          and a.to_date = '9999-01-01'
          and a.emp_no = b.emp_no
          ;

          涉及知識點(diǎn):

          • 完整sql執(zhí)行順序(每天看一遍,不信記不?。?/section>
          from -> where -> group by -> having -> select -> order by -> limit
          • not in 判斷元素是否在集合內(nèi)

          提交結(jié)果:

          題目地址:https://www.nowcoder.com/ta/sql


          --END--


          掃碼即可加我微信

          觀看朋友圈,獲取最新學(xué)習(xí)資源


          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機(jī)器學(xué)習(xí)等方面,別再說不知道該從哪開始,實(shí)戰(zhàn)哪里找了
          優(yōu)秀的讀者都知道,“點(diǎn)贊”傳統(tǒng)美德不能丟 
          瀏覽 40
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丁香五月国内自拍 | 玖玖成人网站 | 超清无码| 五月丁香影视 | 東方在线成人AⅤ |