- Limit Offset
return only 10 records, start on record 16 (OFFSET 15)
SELECT * FROM Orders LIMIT 10 OFFSET 15 - Order
order by points desc, goal_diff desc, team_name; -
Join
can have >, < conditions in joinSELECT a.NAME AS Employee FROM Employee AS a JOIN Employee AS b ON a.ManagerId = b.Id AND a.Salary > b.Salary ;
-
having
select Email from Person group by Email having count(Email) > 1;
- window
rank() over (partition by departmentId order by salary desc) as salaryRank
dense_rank()
lead(num,1) over(order by id) as next_num_1
lead(num,2) over(order by id) as next_num_2
lag(temperature) over (order by recordDate) as previous_temperature - CTE common table expression
with t1 as (…)
select * from t1
with t1 as (…),
t2 as ()
select * from t1
union all
select * from t2
- Recursive CTE
WITH RECURSIVE CTE AS (…) -
IFNULL / coalesce
IFNULL(…,default_value_if_null)
SELECTIFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), NULL) AS SecondHighestSalary
coalesce(round(avg(accepted),2),0)
-
case
selectcase when MOD(id,2)=1 and id=(select max(id) from Seat) then id when MOD(id,2)=1 then id+1 when MOD(id,2)=0 then id-1 end as new_id
from Seat
-
Delete
DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id
-
Update
update Salary set sex = case when sex='m' then 'f' else 'm' end
- Other
Request_day BETWEEN ‘2013-10-01’ AND ‘2013-10-03’
cast(count(*) as float)
ROUND(COUNT(IF(Status != ‘completed’, TRUE, NULL)) / COUNT(*), 2)
Datediff(recordDate,previous_recordDate)=1
Date(call_time)
year(order_date)=2019
MOD(id,2)=1
substring(phone_number,1,3)
Subtract 10 days from a date and return the date: DATE_SUB(“2017-06-15”, INTERVAL 10 DAY)
LEAST(x,y): return the minimum of x and y
GREATEST(x,y): return the maximum of x and y
SELECT GROUP_CONCAT(DISTINCT product ORDER BY product ASC SEPARATOR ‘,’) AS products -
Function
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN Declare n int default N-1; RETURN ( # Write your MySQL query statement below. select distinct salary from employee order by salary desc limit 1 offset n ); END
-
Pivot
CREATE PROCEDURE PivotProducts()
BEGIN#Override GROUP_CONCAT length which has a default limit of 1024
SET SESSION group_concat_max_len = 1000000;#Store case statement for dynamically generated columns in a variable ie case_stmt
SET @case_stmt = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT(‘SUM(CASE WHEN store = “‘, store, ‘” THEN price END) AS ‘, store))
INTO @case_stmt
FROM products;#Insert above statement (@case_stmt) in the following main query to frame final query
SET @sql_query = CONCAT(‘SELECT product_id, ‘, @case_stmt, ‘ FROM products GROUP BY product_id’);#Execute final query
PREPARE final_sql_query FROM @sql_query;
EXECUTE final_sql_query;
DEALLOCATE PREPARE final_sql_query;END
Leetcode
(262. Trips and Users
(2252. Dynamic Pivoting of a Table
(1384. Total Sales Amount by Year
(2153. The Number of Passengers in Each Bus II