几个常见的SQL面试题
1、表一test1 id fgid source,表二test2 id fgid cuid,test1的fgid和source是一一对应的,求每个source的cuid的个数。
思路:第一遍读这个题有点晕,不知所云。然后反复读了几遍,终于有所顿悟,不就是求表一的fgid对应表二的fgid行数数吗。
考察点: right join
数据实例:
test1 test2
答案:
select source, count(*) from (select source from t1 right join t2 on t1.ftid=t2.ftid) a group by source;
结果:
2、学生表student id name class score,找出每门功课都大于80分的同学名字。
数据实例:
思路:这个题需要用排除法,排除所有小于80分的同学。
考察点:not in
答案:
select distinct name from student where name not in(select name from student where score < 80);
结果集:
3、还是student 表,删除所有除id不同别的列都相同的冗余数据。
数据实例:
思路:先找出所有存在冗余的数据,然后根据id删除。
答案:
delete from student where id not in(select * from( select min(id) from student group by name,class,score) a);
第一个有问题吧,source里没有6。我觉得应该是
SELECT
a.source ,
sum(
CASE
WHEN a.cuid IS NULL THEN
0
ELSE
1
END
)
FROM
(
SELECT
test1.source ,
test2.cuid
FROM
test1
LEFT JOIN test2 ON test1.ftid = test2.ftid
) a
GROUP BY
a.source;
a group by source; 这个 a是 什么作用? sql小白 求教
真心求教 a group by source; 这个 a是 什么作用? sql小白 求教
我懂了。。。啦啦啦