SQL Leetcode Questions
SQL Leetcode Questions
ID NUM
1 1
2 1 SELECT A.NUM FROM LOGS A
3 1 INNER JOIN LOGS B
4 2 ON A.ID=B.ID+1 AND A.NUM=B.NUM
5 1 INNER JOIN LOGS C
6 2 ON A.ID=B.ID+2 AND A.NUM=C.NUM;
7 2
Users:
Users_Id Banned Role
1 No client
2 Yes client
3 No Driver
4 No client
Objective:
Find cancellation rate (unbanned users) between '2013-10-01' and '2013-10-03'
with X as (
Selec Request_at,Status from trip
where Request_at between '2013-10-01' and '2013-10-03'
and client_id not in (select user_id from users where banned='Yes')
and driver_id not in (select user_id from users where banned='Yes') )
SELECT Request_at,
ROUND(SUM(CANCELLED_FLAG)/SUM(COMPLETED_FLAG),2) AS CANCELLATION_RATE
SELECT X.*,
CASE WHEN Status='Completed' then 1
ELSE 0 END AS COMPLETED_FLAG,
CASE WHEN Status!='Completed' then 1
ELSE 0 END AS CANCELLED_FLAG FROM X;
512. Game Play Analysis II
Reports the device that is first logged in for each player.
SOLUTION-1
WITH MIN_PLAYER_DATE AS(
SELECT PLAYER_ID, MIN(EVENT_DATE) AS MIN_DATE
FROM ACTIVITY) SOLUTION-2
SELECT PLAYER_ID, DEVICE_ID
SELECT PLAYER_ID, DEVICE_ID FROM ACTIVITY
FROM ACTIVITY A WHERE (PLAYER_ID, EVENT_DATE)
INNER JOIN MIN_PLAYER_DATE M IN (SELECT PLAYER_ID, MIN(EVENT_DATE)
ON A.PLAYER_ID=M.PLAYER_ID FROM ACTIVITY
AND A.EVENT_DATE=M.EVENT_DATE GROUP BY PLAYER_ID);
Order_ID SELECT
Customer_ID CUSTOMER_ID, COUNT(ORDER_ID)
FROM TABLE
GROUP BY CUSTOMER_ID
ORDER BY COUNT(ORDER_ID) DESC
LIMIT 1,1;
607.Sales Person
the names in the table salesperson, who didn’t have sales to company ‘RED’
SELECT name
FROM salesperson
WHERE name NOT IN
(SELECT DISTINCT salesperson.name
FROM salesperson, orders, company
WHERE company.name = 'RED'
AND salesperson.sales_id = orders.sales_id
AND orders.com_id = company.com_id)
619. Biggest Single Number
find the biggest number, which only appears once.
NUM
8 SELECT NUM
8 FROM X
3 GROUP BY NUM
3 HAVING COUNT(NUM)=1
1 ORDER BY NUM DESC LIMIT 0,1;
4
5
6
Customer
Customer_ID SELECT CUSTOMER_ID
Product_Key FROM CUSTOMER
HAVING COUNT(DISTINCT PRODUCT_KEY)=
Product (SELECT DISTINCT COUNT PRODUCT_KEY
Product_Key FROM PRODUCT)
Actions Removals
USER_ID POST_ID WITH X AS (
POST_ID REMOVE_DATE SELECT ACTION_DATE,REPORTED_POST_ID,
ACTION_DATE REMOVED_POST_ID FROM (
ACTION SELECT A.*, R.POST_ID FROM ACTIONS A
EXTRA LEFT JOIN REMOVALS R
ON A.POST_ID=R.POST_ID)
WHERE ACTION='REPORT'
AND EXTRA = 'SPAM')
SELECT ACTION_DATE,
ROUND(COUNT (REPORTED_POST_ID)/
COUNT(REMOVED_POST_ID),2)
FROM X
SELECT transactions_count,
SUM(transactions_count) AS visits_count
FROM (
SELECT IFNULL(X.COUNT_USERS,0)
AS transactions_count
FROM USERS U
LEFT JOIN X
ON U.USER_ID=X.USER_ID
AND U.VISIT_DATE=X.TRANSACTION_DATE)
GROUP BY transactions_count;
Logins WITH T1 AS (
ID SELECT A.*,
Login_Date LEAD(LOGIN_DATE,4) OVER
(PARTITION BY ID ORDER BY LOGIN_DATE) DATE_5
FROM (SELECT DISTINCT * FROM LOGINS) A)
SELECT ID FROM T1
WHERE DATEDIFF(DATE_5, LOGIN_DATE)=4
WITH T1 AS (
SELECT ID, SUM(CALLS) CALLS FROM( SELECT COUNTRY.NAME, AVG(CALLS)
SELECT DISTINCT CALLEE_ID ID, AS COUNTRY_AVG_CALLS FROM (
DURATION FROM CALLS SELECT T1.CALLS, COUNTRY.NAME FROM T1
UNION ALL >>>>>>> INNER JOIN PERSON
SELECT DISTINCT CALLER_ID ID, T1.ID=PERSON.ID
DURATION FROM CALLS) INNER JOIN COUNTRY
GROUP BY ID ON LEFT(PERSON.PHONE_NUM,3)=COUNTRY.COUNTRY_CODE)
), HAVING AVG(CALLS)>=AVG_NTN_CALLS;
AVG_NTN_CALLS AS (
SELECT AVG(CALLS) FROM T1),
#Solution 1:
SELECT user_id, name, mail
FROM Users
WHERE mail regexp "^[a-zA-Z]+[a-zA-Z0-9_\./\-]{0,}@leetcode\.com$"
ORDER BY user_id
#Solution 2:
SELECT * FROM Users
WHERE regexp_like(mail, '^[A-Za-z]+[A-Za-z0-9_.-]*@leetcode.com')
(mail, '^[A-Za-z]+[A-Za-z0-9_.-]*@leetcode.com')
ORDER PRODUCTS
order_id product_id SELECT p.product_name, o.product_id, o.order_id,
order_date product_name o.order_date FROM(
customer_id price SELECT product_id, order_id, order_date,
product_id RANK() OVER(PARTITION BY product_id
ORDER BY order_date DESC) AS seq
FROM orders ) o LEFT JOIN products p
ON o.product_id = p.product_id
WHERE o.seq = 1 ORDER BY 1,2,3
SELECT id AS 'ids'
FROM CTE c
WHERE c.id NOT IN
(SELECT customer_id FROM Customers)
ORDER BY 1 ASC
M,3)=COUNTRY.COUNTRY_CODE)