4019140191 <ul class="md-nav__list">
4019240192
4019340193 <li class="md-nav__item">
40194- <a href="#solution-1" class="md-nav__link">
40194+ <a href="#solution-1-conditional-filtering-grouping-statistics " class="md-nav__link">
4019540195 <span class="md-ellipsis">
40196- Solution 1
40196+ Solution 1: Conditional Filtering + Grouping Statistics
4019740197 </span>
4019840198 </a>
4019940199
@@ -81407,7 +81407,7 @@ <h2 id="description">Description</h2>
8140781407<p><strong class="example">Example 1:</strong></p>
8140881408
8140981409<pre>
81410- <strong>Input:</strong>
81410+ <strong>Input:</strong>
8141181411Orders table:
8141281412+----------+------------+-------------+------------+
8141381413| order_id | order_date | customer_id | invoice |
@@ -81423,7 +81423,7 @@ <h2 id="description">Description</h2>
8142381423| 9 | 2021-01-07 | 3 | 31 |
8142481424| 10 | 2021-01-15 | 2 | 20 |
8142581425+----------+------------+-------------+------------+
81426- <strong>Output:</strong>
81426+ <strong>Output:</strong>
8142781427+---------+-------------+----------------+
8142881428| month | order_count | customer_count |
8142981429+---------+-------------+----------------+
@@ -81432,7 +81432,7 @@ <h2 id="description">Description</h2>
8143281432| 2020-12 | 2 | 1 |
8143381433| 2021-01 | 1 | 1 |
8143481434+---------+-------------+----------------+
81435- <strong>Explanation:</strong>
81435+ <strong>Explanation:</strong>
8143681436In September 2020 we have two orders from 2 different customers with invoices > $20.
8143781437In October 2020 we have two orders from 1 customer, and only one of the two orders has invoice > $20.
8143881438In November 2020 we have two orders from 2 different customers but invoices < $20, so we don't include that month.
@@ -81445,8 +81445,9 @@ <h2 id="description">Description</h2>
8144581445<h2 id="solutions">Solutions</h2>
8144681446<!-- solution:start -->
8144781447
81448- <h3 id="solution-1">Solution 1</h3>
81449- <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>
81448+ <h3 id="solution-1-conditional-filtering-grouping-statistics">Solution 1: Conditional Filtering + Grouping Statistics</h3>
81449+ <p>We can first filter out orders with an amount greater than $20$, and then group by month to count the number of orders and customers.</p>
81450+ <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>
8145081451<div class="tabbed-content">
8145181452<div class="tabbed-block">
8145281453<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
@@ -81463,7 +81464,41 @@ <h3 id="solution-1">Solution 1</h3>
8146381464<span class="w"> </span><span class="k">COUNT</span><span class="p">(</span><span class="k">DISTINCT</span><span class="w"> </span><span class="n">customer_id</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">customer_count</span>
8146481465<span class="k">FROM</span><span class="w"> </span><span class="n">Orders</span>
8146581466<span class="k">WHERE</span><span class="w"> </span><span class="n">invoice</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">20</span>
81466- <span class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="k">month</span><span class="p">;</span>
81467+ <span class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
81468+ </code></pre></div></td></tr></table></div>
81469+ </div>
81470+ <div class="tabbed-block">
81471+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
81472+ <span class="normal"> 2</span>
81473+ <span class="normal"> 3</span>
81474+ <span class="normal"> 4</span>
81475+ <span class="normal"> 5</span>
81476+ <span class="normal"> 6</span>
81477+ <span class="normal"> 7</span>
81478+ <span class="normal"> 8</span>
81479+ <span class="normal"> 9</span>
81480+ <span class="normal">10</span>
81481+ <span class="normal">11</span>
81482+ <span class="normal">12</span>
81483+ <span class="normal">13</span>
81484+ <span class="normal">14</span>
81485+ <span class="normal">15</span>
81486+ <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>
81487+
81488+
81489+ <span class="k">def</span> <span class="nf">unique_orders_and_customers</span><span class="p">(</span><span class="n">orders</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>
81490+ <span class="n">filtered_orders</span> <span class="o">=</span> <span class="n">orders</span><span class="p">[</span><span class="n">orders</span><span class="p">[</span><span class="s2">"invoice"</span><span class="p">]</span> <span class="o">></span> <span class="mi">20</span><span class="p">]</span>
81491+ <span class="n">filtered_orders</span><span class="p">[</span><span class="s2">"month"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
81492+ <span class="n">filtered_orders</span><span class="p">[</span><span class="s2">"order_date"</span><span class="p">]</span><span class="o">.</span><span class="n">dt</span><span class="o">.</span><span class="n">to_period</span><span class="p">(</span><span class="s2">"M"</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
81493+ <span class="p">)</span>
81494+ <span class="n">result</span> <span class="o">=</span> <span class="p">(</span>
81495+ <span class="n">filtered_orders</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">"month"</span><span class="p">)</span>
81496+ <span class="o">.</span><span class="n">agg</span><span class="p">(</span>
81497+ <span class="n">order_count</span><span class="o">=</span><span class="p">(</span><span class="s2">"order_id"</span><span class="p">,</span> <span class="s2">"count"</span><span class="p">),</span> <span class="n">customer_count</span><span class="o">=</span><span class="p">(</span><span class="s2">"customer_id"</span><span class="p">,</span> <span class="s2">"nunique"</span><span class="p">)</span>
81498+ <span class="p">)</span>
81499+ <span class="o">.</span><span class="n">reset_index</span><span class="p">()</span>
81500+ <span class="p">)</span>
81501+ <span class="k">return</span> <span class="n">result</span>
8146781502</code></pre></div></td></tr></table></div>
8146881503</div>
8146981504</div>
0 commit comments