1.查找相邻两天的温度差,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。
原先的SQL是 :
select id from Weather w where exists (select 1 from Weather ww where w.recordDate - ww.recordDate =1 and w.Temperature > ww.Temperature )
结果用例过了15个。。。死在最后一个。最后发现是时间相减的问题,
最后用上【DATEDIFF】函数:
select id from Weather w where exists (select 1 from Weather ww where DATEDIFF(w.recordDate,ww.recordDate ) =1 and w.Temperature > ww.Temperature )
直接A。
附一下:TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) 函数,主要用来计算两个时间差
interval取值:SECOND,MINUTE,HOUR,DAY,MONTH,YEAR
2.[查找N个部门中最高的薪资]
虽然自己写的比较臃肿,最后也是A了,不过看到了一种in的用法,比较巧妙,特此记录。
select
d.Name as Department,
e.Name as Employee,
e.Salary
from
Employee e,Department d
where
e.DepartmentId=d.id
and
(e.Salary,e.DepartmentId) in (select max(Salary),DepartmentId from Employee group by DepartmentId);
3.substr(string,pos,end) end不填默认到最后面,mysql中pos从1开始。
upper 转换大写,lower转换小写。
求最大不仅可以用max 还可以 排序完limit1
4.连续空余座位 主要是考察 找出连续几条的某个值都是一样的情况,自己写的sql还是比较囊肿了一点- -<,参考了下别人的做法,巧妙的运用了abs函数。
select distinct c1.seat_id
from cinema c1, cinema c2
where abs(c2.seat_id-c1.seat_id)=1
and c1.free=1 and c2.free=1
order by c1.seat_id
5.using的用法。
select * from 表1 inner join 表2 on 表1.相同的列=表2.相同的列;
等同于
select * from 表1 inner join 表2 using(相同的列);
6.列转行和行转列
行转列用group by+sum if(case when),列转行用union all
7.count(字段)不会计算null的数量,但是count(*) 或者 count(1)会把null的也统计进去
8.统计中文字符变量的长度,用char_length(),用length()的话,汉字会默认占3个长度
Comments | NOTHING