|
74979 | 74979 | <ul class="md-nav__list">
|
74980 | 74980 |
|
74981 | 74981 | <li class="md-nav__item">
|
74982 |
| - <a href="#solution-1" class="md-nav__link"> |
| 74982 | + <a href="#solution-1-recursive-cte-join" class="md-nav__link"> |
74983 | 74983 | <span class="md-ellipsis">
|
74984 |
| - Solution 1 |
| 74984 | + Solution 1: Recursive CTE + Join |
74985 | 74985 | </span>
|
74986 | 74986 | </a>
|
74987 | 74987 |
|
@@ -77743,11 +77743,86 @@ <h2 id="description">Description</h2>
|
77743 | 77743 | <h2 id="solutions">Solutions</h2>
|
77744 | 77744 | <!-- solution:start -->
|
77745 | 77745 |
|
77746 |
| -<h3 id="solution-1">Solution 1</h3> |
| 77746 | +<h3 id="solution-1-recursive-cte-join">Solution 1: Recursive CTE + Join</h3> |
| 77747 | +<p>First, we use a recursive CTE to calculate the hierarchy level of each employee, where the CEO's level is $0$. We save <code>employee_id</code>, <code>employee_name</code>, <code>hierarchy_level</code>, <code>manager_id</code>, and <code>salary</code> into a temporary table <code>T</code>.</p> |
| 77748 | +<p>Then, we query the CEO's salary and save it into a temporary table <code>P</code>.</p> |
| 77749 | +<p>Finally, we join tables <code>T</code> and <code>P</code> to calculate the salary difference for each subordinate, and sort by <code>hierarchy_level</code> and <code>subordinate_id</code>.</p> |
77747 | 77750 | <div class="tabbed-set tabbed-alternate" data-tabs="1:1"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">MySQL</label></div>
|
77748 | 77751 | <div class="tabbed-content">
|
77749 | 77752 | <div class="tabbed-block">
|
77750 |
| -<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><code> |
| 77753 | +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span> |
| 77754 | +<span class="normal"> 2</span> |
| 77755 | +<span class="normal"> 3</span> |
| 77756 | +<span class="normal"> 4</span> |
| 77757 | +<span class="normal"> 5</span> |
| 77758 | +<span class="normal"> 6</span> |
| 77759 | +<span class="normal"> 7</span> |
| 77760 | +<span class="normal"> 8</span> |
| 77761 | +<span class="normal"> 9</span> |
| 77762 | +<span class="normal">10</span> |
| 77763 | +<span class="normal">11</span> |
| 77764 | +<span class="normal">12</span> |
| 77765 | +<span class="normal">13</span> |
| 77766 | +<span class="normal">14</span> |
| 77767 | +<span class="normal">15</span> |
| 77768 | +<span class="normal">16</span> |
| 77769 | +<span class="normal">17</span> |
| 77770 | +<span class="normal">18</span> |
| 77771 | +<span class="normal">19</span> |
| 77772 | +<span class="normal">20</span> |
| 77773 | +<span class="normal">21</span> |
| 77774 | +<span class="normal">22</span> |
| 77775 | +<span class="normal">23</span> |
| 77776 | +<span class="normal">24</span> |
| 77777 | +<span class="normal">25</span> |
| 77778 | +<span class="normal">26</span> |
| 77779 | +<span class="normal">27</span> |
| 77780 | +<span class="normal">28</span> |
| 77781 | +<span class="normal">29</span> |
| 77782 | +<span class="normal">30</span> |
| 77783 | +<span class="normal">31</span> |
| 77784 | +<span class="normal">32</span> |
| 77785 | +<span class="normal">33</span> |
| 77786 | +<span class="normal">34</span> |
| 77787 | +<span class="normal">35</span> |
| 77788 | +<span class="normal">36</span> |
| 77789 | +<span class="normal">37</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="o">#</span><span class="w"> </span><span class="k">Write</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">MySQL</span><span class="w"> </span><span class="n">query</span><span class="w"> </span><span class="k">statement</span><span class="w"> </span><span class="n">below</span> |
| 77790 | +<span class="k">WITH</span><span class="w"> </span><span class="k">RECURSIVE</span> |
| 77791 | +<span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span> |
| 77792 | +<span class="w"> </span><span class="k">SELECT</span> |
| 77793 | +<span class="w"> </span><span class="n">employee_id</span><span class="p">,</span> |
| 77794 | +<span class="w"> </span><span class="n">employee_name</span><span class="p">,</span> |
| 77795 | +<span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">hierarchy_level</span><span class="p">,</span> |
| 77796 | +<span class="w"> </span><span class="n">manager_id</span><span class="p">,</span> |
| 77797 | +<span class="w"> </span><span class="n">salary</span> |
| 77798 | +<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Employees</span> |
| 77799 | +<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">manager_id</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">NULL</span> |
| 77800 | +<span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">ALL</span> |
| 77801 | +<span class="w"> </span><span class="k">SELECT</span> |
| 77802 | +<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">employee_id</span><span class="p">,</span> |
| 77803 | +<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">employee_name</span><span class="p">,</span> |
| 77804 | +<span class="w"> </span><span class="n">hierarchy_level</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">hierarchy_level</span><span class="p">,</span> |
| 77805 | +<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">manager_id</span><span class="p">,</span> |
| 77806 | +<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">salary</span> |
| 77807 | +<span class="w"> </span><span class="k">FROM</span> |
| 77808 | +<span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="n">t</span> |
| 77809 | +<span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Employees</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">t</span><span class="p">.</span><span class="n">employee_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">manager_id</span> |
| 77810 | +<span class="w"> </span><span class="p">),</span> |
| 77811 | +<span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span> |
| 77812 | +<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="n">salary</span> |
| 77813 | +<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Employees</span> |
| 77814 | +<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">manager_id</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">NULL</span> |
| 77815 | +<span class="w"> </span><span class="p">)</span> |
| 77816 | +<span class="k">SELECT</span> |
| 77817 | +<span class="w"> </span><span class="n">employee_id</span><span class="w"> </span><span class="n">subordinate_id</span><span class="p">,</span> |
| 77818 | +<span class="w"> </span><span class="n">employee_name</span><span class="w"> </span><span class="n">subordinate_name</span><span class="p">,</span> |
| 77819 | +<span class="w"> </span><span class="n">hierarchy_level</span><span class="p">,</span> |
| 77820 | +<span class="w"> </span><span class="n">t</span><span class="p">.</span><span class="n">salary</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">salary</span><span class="w"> </span><span class="n">salary_difference</span> |
| 77821 | +<span class="k">FROM</span> |
| 77822 | +<span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="n">t</span> |
| 77823 | +<span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="n">p</span> |
| 77824 | +<span class="k">WHERE</span><span class="w"> </span><span class="n">hierarchy_level</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span> |
| 77825 | +<span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> |
77751 | 77826 | </code></pre></div></td></tr></table></div>
|
77752 | 77827 | </div>
|
77753 | 77828 | </div>
|
|
0 commit comments