1.distinct ——消除相同数据
//显示表名为tableName的表中的field字段,相同数据仅显示一次
select distinct fieldName from tableName;
2.group by ——根据group by 后面的字段进行分类汇总
3.having ——对group by聚合后的结果在进行一次挑选
//将表名为tableName的表根据字段fieldName进行分组聚合并对每组进行计数(count(fieldName)),
//输出其中计数大于1的数据的fieldName字段及其计数结果
//计数结果显示在新的名称为num的字段下(不会影响数据库的数据)
select fieldName,count(fieldName) as num
from tableName
group by fieldName
having num>1;
3.datadiff ——求日期之间的差值
// datadiff(date1,date2)求date1和date2之间的差值(date1-date2)。
//求名为tableName1的表和名为tableName2的表的交叉连接中 date1 和date2 相差1的数据
//若是整型数据,等价于 where a.date1-b.date2=1
select * from tableName1 as a, tableName2 as b
where datediff(a.date1,b.date2)=1;
4.union ——会对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。
//在表名为tableName的表中筛选 a>0 和 b>0 的数据
select * from tableName
where a>0
union
select * from tableName
where b>0
5.case...when...end ——sql 中的选择语句
(1)简单case函数
//未验证
case sex
when '1' then '男'
when '0' then '女'
else '错误'
end
(2)case 搜索函数
case
when sex='1' then '男'
when sex='0' then '女'
else '错误'
end
例子:610. 判断三角形
#判断x,y,z是否能组成三角形
#表 triangle 中有三个字段,x,y,z,且取值都为整数,判断x、y、z是否能组成三角形并按下行输出
#输出:x y z triangle(即判断结果)
select x,y,z,(case
when x+y>z and x+z>y and y+z>x then 'Yes'
else 'No'
end) as triangle
from triangle
6.if(expression,trueThen,falseThen)
count(if(expression,1,num))
sum(if(expression,1,0))
sum(if(expression,column,0))
例子:1211. 查询结果的质量和占比
# Write your MySQL query statement below
select query_name,round(sum(rating/position)/count(*),2) as quality,round(count(if(rating<3,1,null))/count(*)*100,2) as poor_query_percentage
from (select distinct query_name,result,position,rating
from queries) as a
group by query_name
7.IFNULL(exp1,exp2)——当 exp1 为 null 时,变更为 exp2。
ifnull(sum(column),0) #当column 列求和结果为 null 时,变更为 0
例子:1407. 排名靠前的旅行者
# Write your MySQL query statement below
select a.name,ifnull(sum(b.distance),0) as travelled_distance
from users as a left join Rides as b on b.user_id=a.id
group by b.user_id
order by travelled_distance desc, name
8. group_concat ——将组中字符串以指定分隔符连接成单个字符串,不指定时默认为','
group_concat(distinct expression #去重
order by expression #排列顺序
separator sep); #分隔符 eg.','
例子:1484. 按日期分组销售产品
# Write your MySQL query statement below
select sell_date,
count( distinct product) as num_sold,
group_concat(distinct product
order by product
separator ",") as products
from Activities
group by sell_date
order by sell_date;
9.concat(str1,str2...,strn) 按序连接字符串 str1 str2 ......strn ,形成新的字符串
10.length(str1) 获得字符串 str1 的长度
11.upper(str1) 将 str1 中的字母字符转换为大写
12.lower(str1) 将 str1 中的字母字符转换为小写
13.substring(str1,x,y) 截取 str1 从位置 x 开始的 y 个字符串作为字符串,注意,sql 中字符串位置从 1 开始。
substring(str1,x) 截取 str1 从位置 x 开始的所有字符