**面试题:**
将李四的所有订单改为100,支付状态都改为1
update goods_copy set oorder='100',pay=1 WHERE nname='李四'
--------
查出每一个name每一天购买的订单的数量,和订单总金额
select nname,date,sum(price),COUNT(oorder) from goods_copy GROUP BY date,nname
----------
查询student表中重名的学生,结果包含id和name,按name,id升序
select id,name from students where in(select name from staudens group by havingcount(*)>1) order by name;
--------
在student_course表中查询平均分不及格的学生,列出学生id和平均分
select id, avg(coure) avg from student_course group by id havng(avg<60);
-------
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。having 子句可以让我们筛选分组后的各组数据。
在student_course表中查询每门课成绩都不低于80的学生id
select id from student_course where not in (select id from student_course where course <80);
-------------
查询每个学生的总成绩,结果列出学生姓名和总成绩 如果使用下面的sql会过滤掉没有成绩的人
select name,sum(score) total
from student,student_course
where student.id=student_course.sid
group by sid;
更保险的做法应该是使用 左外连接
select name,sum(score)
from student left join student_course
on student.id=student_course.sid
group by sid;
------------------------
总成绩最高的学生,结果列出学生id和总成绩 下面的sql效率很低,因为要重复计算所有的总成绩。同理可以查总成绩的前三名。
select sid,sum(score) as sum_score
from student_course group by sid
order by sum_score desc limit 1;
--------------------------
在student_course表查询课程1成绩第2高的学生,如果第2高的不止一个则列出所有的学生
select * from student_course
where cid=1 and score = (
select score from student_course where cid = 1 group by score order by score desc limit 1,1
);
---------------------------
sql常见面试题
最新推荐文章于 2021-04-24 22:06:00 发布