42911
42911
<ul class="md-nav__list">
42912
42912
42913
42913
<li class="md-nav__item">
42914
- <a href="#solution-1" class="md-nav__link">
42914
+ <a href="#solution-1-left-join-summation " class="md-nav__link">
42915
42915
<span class="md-ellipsis">
42916
- Solution 1
42916
+ Solution 1: Left Join + Summation
42917
42917
</span>
42918
42918
</a>
42919
42919
@@ -76523,8 +76523,9 @@ <h2 id="description">Description</h2>
76523
76523
<h2 id="solutions">Solutions</h2>
76524
76524
<!-- solution:start -->
76525
76525
76526
- <h3 id="solution-1">Solution 1</h3>
76527
- <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>
76526
+ <h3 id="solution-1-left-join-summation">Solution 1: Left Join + Summation</h3>
76527
+ <p>We can perform a left join on the <code>Boxes</code> table and the <code>Chests</code> table based on <code>chest_id</code>, and then calculate the total number of apples and oranges respectively. Note that if a box does not contain any small boxes, then the corresponding <code>chest_id</code> will be <code>null</code>. In this case, we need to consider the number of apples and oranges in the small boxes within that box to be 0.</p>
76528
+ <div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">MySQL</label><label for="__tabbed_1_2">Python3</label></div>
76528
76529
<div class="tabbed-content">
76529
76530
<div class="tabbed-block">
76530
76531
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
@@ -76539,7 +76540,41 @@ <h3 id="solution-1">Solution 1</h3>
76539
76540
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">IFNULL</span><span class="p">(</span><span class="n">b</span><span class="p">.</span><span class="n">orange_count</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">IFNULL</span><span class="p">(</span><span class="k">c</span><span class="p">.</span><span class="n">orange_count</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">orange_count</span>
76540
76541
<span class="k">FROM</span>
76541
76542
<span class="w"> </span><span class="n">Boxes</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">b</span>
76542
- <span class="w"> </span><span class="k">LEFT</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Chests</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">c</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">chest_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">c</span><span class="p">.</span><span class="n">chest_id</span><span class="p">;</span>
76543
+ <span class="w"> </span><span class="k">LEFT</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Chests</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">c</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="p">(</span><span class="n">chest_id</span><span class="p">);</span>
76544
+ </code></pre></div></td></tr></table></div>
76545
+ </div>
76546
+ <div class="tabbed-block">
76547
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
76548
+ <span class="normal"> 2</span>
76549
+ <span class="normal"> 3</span>
76550
+ <span class="normal"> 4</span>
76551
+ <span class="normal"> 5</span>
76552
+ <span class="normal"> 6</span>
76553
+ <span class="normal"> 7</span>
76554
+ <span class="normal"> 8</span>
76555
+ <span class="normal"> 9</span>
76556
+ <span class="normal">10</span>
76557
+ <span class="normal">11</span>
76558
+ <span class="normal">12</span>
76559
+ <span class="normal">13</span>
76560
+ <span class="normal">14</span>
76561
+ <span class="normal">15</span>
76562
+ <span class="normal">16</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
76563
+
76564
+
76565
+ <span class="k">def</span> <span class="nf">count_apples_and_oranges</span><span class="p">(</span><span class="n">boxes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">chests</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">)</span> <span class="o">-></span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
76566
+ <span class="n">merged_df</span> <span class="o">=</span> <span class="n">boxes</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span>
76567
+ <span class="n">chests</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s2">"chest_id"</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">"left"</span><span class="p">,</span> <span class="n">suffixes</span><span class="o">=</span><span class="p">(</span><span class="s2">"_box"</span><span class="p">,</span> <span class="s2">"_chest"</span><span class="p">)</span>
76568
+ <span class="p">)</span>
76569
+ <span class="n">apple_count</span> <span class="o">=</span> <span class="p">(</span>
76570
+ <span class="n">merged_df</span><span class="p">[</span><span class="s2">"apple_count_box"</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
76571
+ <span class="o">+</span> <span class="n">merged_df</span><span class="p">[</span><span class="s2">"apple_count_chest"</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
76572
+ <span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
76573
+ <span class="n">orange_count</span> <span class="o">=</span> <span class="p">(</span>
76574
+ <span class="n">merged_df</span><span class="p">[</span><span class="s2">"orange_count_box"</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
76575
+ <span class="o">+</span> <span class="n">merged_df</span><span class="p">[</span><span class="s2">"orange_count_chest"</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
76576
+ <span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
76577
+ <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s2">"apple_count"</span><span class="p">:</span> <span class="p">[</span><span class="n">apple_count</span><span class="p">],</span> <span class="s2">"orange_count"</span><span class="p">:</span> <span class="p">[</span><span class="n">orange_count</span><span class="p">]})</span>
76543
76578
</code></pre></div></td></tr></table></div>
76544
76579
</div>
76545
76580
</div>
0 commit comments