forked from fishercoder1534/Leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_1364.sql
115 lines (112 loc) · 4.62 KB
/
_1364.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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
--1364. Number of Trusted Contacts of a Customer
--
--Table: Customers
--
--+---------------+---------+
--| Column Name | Type |
--+---------------+---------+
--| customer_id | int |
--| customer_name | varchar |
--| email | varchar |
--+---------------+---------+
--customer_id is the primary key for this table.
--Each row of this table contains the name and the email of a customer of an online shop.
--
--
--Table: Contacts
--
--+---------------+---------+
--| Column Name | Type |
--+---------------+---------+
--| user_id | id |
--| contact_name | varchar |
--| contact_email | varchar |
--+---------------+---------+
--(user_id, contact_email) is the primary key for this table.
--Each row of this table contains the name and email of one contact of customer with user_id.
--This table contains information about people each customer trust. The contact may or may not exist in the Customers table.
--
--
--
--Table: Invoices
--
--+--------------+---------+
--| Column Name | Type |
--+--------------+---------+
--| invoice_id | int |
--| price | int |
--| user_id | int |
--+--------------+---------+
--invoice_id is the primary key for this table.
--Each row of this table indicates that user_id has an invoice with invoice_id and a price.
--
--
--Write an SQL query to find the following for each invoice_id:
--
--customer_name: The name of the customer the invoice is related to.
--price: The price of the invoice.
--contacts_cnt: The number of contacts related to the customer.
--trusted_contacts_cnt: The number of contacts related to the customer and at the same time they are customers to the shop. (i.e His/Her email exists in the Customers table.)
--Order the result table by invoice_id.
--
--The query result format is in the following example:
--
--Customers table:
--+-------------+---------------+--------------------+
--| customer_id | customer_name | email |
--+-------------+---------------+--------------------+
--| 1 | Alice | alice@leetcode.com |
--| 2 | Bob | bob@leetcode.com |
--| 13 | John | john@leetcode.com |
--| 6 | Alex | alex@leetcode.com |
--+-------------+---------------+--------------------+
--Contacts table:
--+-------------+--------------+--------------------+
--| user_id | contact_name | contact_email |
--+-------------+--------------+--------------------+
--| 1 | Bob | bob@leetcode.com |
--| 1 | John | john@leetcode.com |
--| 1 | Jal | jal@leetcode.com |
--| 2 | Omar | omar@leetcode.com |
--| 2 | Meir | meir@leetcode.com |
--| 6 | Alice | alice@leetcode.com |
--+-------------+--------------+--------------------+
--Invoices table:
--+------------+-------+---------+
--| invoice_id | price | user_id |
--+------------+-------+---------+
--| 77 | 100 | 1 |
--| 88 | 200 | 1 |
--| 99 | 300 | 2 |
--| 66 | 400 | 2 |
--| 55 | 500 | 13 |
--| 44 | 60 | 6 |
--+------------+-------+---------+
--Result table:
--+------------+---------------+-------+--------------+----------------------+
--| invoice_id | customer_name | price | contacts_cnt | trusted_contacts_cnt |
--+------------+---------------+-------+--------------+----------------------+
--| 44 | Alex | 60 | 1 | 1 |
--| 55 | John | 500 | 0 | 0 |
--| 66 | Bob | 400 | 2 | 0 |
--| 77 | Alice | 100 | 3 | 2 |
--| 88 | Alice | 200 | 3 | 2 |
--| 99 | Bob | 300 | 2 | 0 |
--+------------+---------------+-------+--------------+----------------------+
--Alice has three contacts, two of them are trusted contacts (Bob and John).
--Bob has two contacts, none of them is a trusted contact.
--Alex has one contact and it is a trusted contact (Alice).
--John doesn't have any contacts.
--credit: https://leetcode.com/problems/number-of-trusted-contacts-of-a-customer/discuss/522435/mysql-simple-solution
select i.invoice_id,
c.customer_name,
i.price,
count(cont.contact_name) contacts_cnt,
sum(
if(cont.contact_name in (select distinct customer_name from customers), 1, 0)
) as trusted_contacts_cnt
from invoices i
join customers c on c.customer_id = i.user_id
left join Contacts cont on cont.user_id = c.customer_id
group by i.invoice_id
order by i.invoice_id;