day56-mysql-其他查询-面试题-重点

一、重点 面试题
    1. 临时表查询:
        -- 查询高于本部门平均工资的人员

        #1.先查询部门人员的平均工资
        SELECT dept_id,AVG(salary)as sal from person GROUP BY dept_id;
 
        #2.再用人员的工资与部门的平均工资进行比较
        SELECT * FROM person as p1,
            (SELECT dept_id,AVG(salary)as '平均工资' from person GROUP BY dept_id) as p2
        where p1.dept_id = p2.dept_id AND p1.salary >p2.`平均工资`;

        ps:在当前语句中,我们可以把上一次的查询结果当前做一张表来使用.因为p2表不是真是存在的,所以:我们称之为 临时表  
           临时表:不局限于自身表,任何的查询结果集都可以认为是一个临时表.

2.判断查询: IF关键字语句可以作为字段名:三元运算 根据工资高低,将人员划分为两个级别,分别为 高端人群和低端人群。 -- 显示效果:姓名,年龄,性别,工资,级别 select p.name,p.age,p.sex,p.salary ,IF(salary>10000,'高端人群','低端人群') as '级别' from person; select name,salary,if(salary>10000,'高端人群','低端人群') from person;
3. #语法一: SELECT CASE WHEN STATE = '1' THEN '成功' WHEN STATE = '2' THEN '失败' ELSE '其他' END FROM 表; #语法二: SELECT CASE age WHEN 23 THEN '23岁' WHEN 27 THEN '27岁' WHEN 30 THEN '30岁' ELSE '其他岁' END FROM person; select name, (case when salary > 6000 then '小康' when salary > 3000 and salary <= 6000 then '屌丝' else '' end ) as '级别' from person;
-- 根据工资高低,统计每个部门人员收入情况,划分为 富人,小资,平民,吊丝 四个级别, -- 要求统计四个级别分别有多少人 select dname , sum(case when person.salary > 10000 THEN 1 else 0 END) as '富人', sum(case when person.salary BETWEEN 5001 and 10000 THEN 1 else 0 END) as '小资', sum(case when person.salary BETWEEN 3001 and 5000 THEN 1 else 0 END) as '平民', sum(case when person.salary <= 3000 THEN 1 else 0 END) as '屌丝' from dept,person where dept.did = person.dept_id GROUP BY dept.did

 

posted @ 2020-02-03 19:48  梁劲雄  阅读(117)  评论(0编辑  收藏  举报