- 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 join
SELECT a.NAME AS Employee FROM Employee AS a JOIN Employee AS b ON a.ManagerId = b.Id AND a.Salary > b.Salary ;
- 【SQL笔记】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
t2 as ()
select * from t1
union all
select * from t2
- Recursive CTE
WITH RECURSIVE CTE AS (...) - IFNULL / coalesce
IFNULL(...,default_value_if_null)
SELECT
IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), NULL) AS SecondHighestSalary
- case
select
case 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
(2252. Dynamic Pivoting of a Table
(1384. Total Sales Amount by Year
(2153. The Number of Passengers in Each Bus II
推荐阅读
- MySQL|MySQL - 全文索引
- 做题记录|墨者SQL手工注入漏洞测试(MongoDB数据库)题解
- 大数据|达梦数据库(DM8)存储过程函数使用
- SQL每日一练|SQL每日一练(牛客新题库)——第3天( 条件查询)
- SQL学习笔记,(参考《SQL入门经典》第5版)
- Navicat|Navicat 被投毒了 | 调查结果来了
- “数据库”指南|养成写sql的一些好习惯(MySQL)
- 字符串|MySQL中,21个写SQL语句的好习惯
- sql|sql 好mysql_Mysql中,21个写SQL的好习惯,你值得拥有呀