SQL51 查找字符串中逗号出现的次数
select id,length(string) - length(replace(string,',','')) from strings
解题思路:
①巧用length函数和replace,length函数计算字符串的长度,length(string)算出整个字符串的长度。
②使用replace将 , 替换为空,那么整个字符串减少的长度等于 , 的长度,两者相减就是 , 出现的次数。
SQL52 获取employees中的first_name
select first_name from employees order by substring(first_name, length(first_name)-1,2)
解题思路:使用字符串截取函数subtring(对象字符串,截取的起始位置,截取的字符数),截取出最后两位字符,然后使用order by …asc进行升序排序。截取的起始位置:是从1开始的。
SQL53 按照dept_no进行汇总
select dept_no,group_concat(emp_no separator ',') from dept_emp group by dept_no
解题思路:
①连接同一列字段:group_concat( [distinct] <要连接的字段> [order by 排序字段 asc/desc ] [separator '分隔符'] ) 。分隔符可以选择省略,省略时默认为逗号,这里还是写出来了。另外还有一点需要注意,group_concat函数中的各个参数之间用空格隔开,不能用逗号隔开,不然会出错。
②按照dept_no进行汇总,所以要对dept_no进行分组。
SQL54 平均工资
select avg(salary) as avg_salary from salaries where to_date = '9999-01-01' and salary not in (select max(salary) from salaries where to_date = '9999-01-01')and salary not in (select min(salary) from salaries where to_date = '9999-01-01')
解题思路:用两个子查询找出最大工资和最小工资,再用not in去除最大工资和最小工资,最后记得限定时间为当前。
SQL55 分页查询employees表,每5行一页,返回第2页的数据
select * from employees limit 5 offset 5
select * from employees limit 5,5
解题思路:(在Mysql中)每行5页,返回第2页的数据,即返回第6~10条记录,以下有两种方法可以解决:
方法一:利用 LIMIT 和 OFFSET 关键字。LIMIT 后的数字代表返回几条记录,OFFSET 后的数字代表从第几条记录开始返回(第一条记录序号为0),也可理解为跳过多少条记录后开始返回。
方法二:只利用 LIMIT 关键字。注意:在 LIMIT X,Y 中,Y代表返回几条记录,X代表从第几条记录开始返回(第一条记录序号为0)