40191
40191
<ul class="md-nav__list">
40192
40192
40193
40193
<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">
40195
40195
<span class="md-ellipsis">
40196
- Solution 1
40196
+ Solution 1: Conditional Filtering + Grouping Statistics
40197
40197
</span>
40198
40198
</a>
40199
40199
@@ -81407,7 +81407,7 @@ <h2 id="description">Description</h2>
81407
81407
<p><strong class="example">Example 1:</strong></p>
81408
81408
81409
81409
<pre>
81410
- <strong>Input:</strong>
81410
+ <strong>Input:</strong>
81411
81411
Orders table:
81412
81412
+----------+------------+-------------+------------+
81413
81413
| order_id | order_date | customer_id | invoice |
@@ -81423,7 +81423,7 @@ <h2 id="description">Description</h2>
81423
81423
| 9 | 2021-01-07 | 3 | 31 |
81424
81424
| 10 | 2021-01-15 | 2 | 20 |
81425
81425
+----------+------------+-------------+------------+
81426
- <strong>Output:</strong>
81426
+ <strong>Output:</strong>
81427
81427
+---------+-------------+----------------+
81428
81428
| month | order_count | customer_count |
81429
81429
+---------+-------------+----------------+
@@ -81432,7 +81432,7 @@ <h2 id="description">Description</h2>
81432
81432
| 2020-12 | 2 | 1 |
81433
81433
| 2021-01 | 1 | 1 |
81434
81434
+---------+-------------+----------------+
81435
- <strong>Explanation:</strong>
81435
+ <strong>Explanation:</strong>
81436
81436
In September 2020 we have two orders from 2 different customers with invoices > $20.
81437
81437
In October 2020 we have two orders from 1 customer, and only one of the two orders has invoice > $20.
81438
81438
In 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>
81445
81445
<h2 id="solutions">Solutions</h2>
81446
81446
<!-- solution:start -->
81447
81447
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>
81450
81451
<div class="tabbed-content">
81451
81452
<div class="tabbed-block">
81452
81453
<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>
81463
81464
<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>
81464
81465
<span class="k">FROM</span><span class="w"> </span><span class="n">Orders</span>
81465
81466
<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>
81467
81502
</code></pre></div></td></tr></table></div>
81468
81503
</div>
81469
81504
</div>
0 commit comments