-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathListOfProductsOrdered.sql
100 lines (88 loc) · 3.45 KB
/
ListOfProductsOrdered.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
-- Table: Products
-- +------------------+---------+
-- | Column Name | Type |
-- +------------------+---------+
-- | product_id | int |
-- | product_name | varchar |
-- | product_category | varchar |
-- +------------------+---------+
-- product_id is the primary key (column with unique values) for this table.
-- This table contains data about the company's products.
-- Table: Orders
-- +---------------+---------+
-- | Column Name | Type |
-- +---------------+---------+
-- | product_id | int |
-- | order_date | date |
-- | unit | int |
-- +---------------+---------+
-- This table may have duplicate rows.
-- product_id is a foreign key (reference column) to the Products table.
-- unit is the number of products ordered in order_date.
-- Write a solution to get the names of products that have at least 100 units ordered in February 2020 and their amount.
-- Return the result table in any order.
-- The result format is in the following example.
-- Example 1:
-- Input:
-- Products table:
-- +-------------+-----------------------+------------------+
-- | product_id | product_name | product_category |
-- +-------------+-----------------------+------------------+
-- | 1 | Leetcode Solutions | Book |
-- | 2 | Jewels of Stringology | Book |
-- | 3 | HP | Laptop |
-- | 4 | Lenovo | Laptop |
-- | 5 | Leetcode Kit | T-shirt |
-- +-------------+-----------------------+------------------+
-- Orders table:
-- +--------------+--------------+----------+
-- | product_id | order_date | unit |
-- +--------------+--------------+----------+
-- | 1 | 2020-02-05 | 60 |
-- | 1 | 2020-02-10 | 70 |
-- | 2 | 2020-01-18 | 30 |
-- | 2 | 2020-02-11 | 80 |
-- | 3 | 2020-02-17 | 2 |
-- | 3 | 2020-02-24 | 3 |
-- | 4 | 2020-03-01 | 20 |
-- | 4 | 2020-03-04 | 30 |
-- | 4 | 2020-03-04 | 60 |
-- | 5 | 2020-02-25 | 50 |
-- | 5 | 2020-02-27 | 50 |
-- | 5 | 2020-03-01 | 50 |
-- +--------------+--------------+----------+
-- Output:
-- +--------------------+---------+
-- | product_name | unit |
-- +--------------------+---------+
-- | Leetcode Solutions | 130 |
-- | Leetcode Kit | 100 |
-- +--------------------+---------+
-- Explanation:
-- Products with product_id = 1 is ordered in February a total of (60 + 70) = 130.
-- Products with product_id = 2 is ordered in February a total of 80.
-- Products with product_id = 3 is ordered in February a total of (2 + 3) = 5.
-- Products with product_id = 4 was not ordered in February 2020.
-- Products with product_id = 5 is ordered in February a total of (50 + 50) = 100.
-- Write your PostgreSQL query statement below
-- Solution
select p.product_name,
sq.total_units as unit
from
(
select sq.product_id,
sq.order_month,
sum(sq.unit) as total_units
from
(
select product_id,
to_char(order_date,'YYYY-MM') as order_month,
unit
from Orders
) sq
group by sq.product_id,
sq.order_month
) sq join Products p on (
p.product_id = sq.product_id
) where sq.order_month = '2020-02' and
sq.total_units >= 100;