zoukankan      html  css  js  c++  java
  • SQL14

    题目描述
    给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。
    提示:在sqlite中获取datetime时间对应的年份函数为strftime('%Y', to_date)

    CREATE TABLE `salaries` (
    `emp_no` int(11) NOT NULL,
    `salary` int(11) NOT NULL,
    `from_date` date NOT NULL,
    `to_date` date NOT NULL,
    PRIMARY KEY (`emp_no`,`from_date`));
    

    输出示例:

    emp_no	from_date	salary_growth
    
    10003  1995-12-03   24178
    

    思路:
    1.同一个员工每年可能调一次薪,也有可能调两次薪。所以先查询出每个员工每年调薪的幅值。
    难点在于每年这个过滤条件怎么写?题目提示用年份函数strftime('%Y', to_date)。
    故想到每年可以用以下表达式来表示:

         strftime('%Y', A.to_date)-strftime('%Y', B.to_date)=1 
    or strftime('%Y', A.from_date)-strftime('%Y', B.from_date)=1
    

    2.过滤出涨幅值salary_growth大于5000的情况。最后order by desc 逆序排列。

    故参考答案为:

    select A.emp_no,A.from_date,(A.salary-B.salary) salary_growth
    from salaries A,salaries B
    where A.emp_no=B.emp_no 
    and (strftime('%Y', A.to_date)-strftime('%Y', B.to_date)=1 
    or strftime('%Y', A.from_date)-strftime('%Y', B.from_date)=1 )
    and salary_growth>5000 order by salary_growth desc
    做成比做好更重要
  • 相关阅读:
    个性化推荐系统中的BadCase分析
    Hadoop优先级调度
    【剑指offer】斐波那契数列
    【剑指offer】旋转数组的最小数字
    【剑指offer】用两个栈实现队列
    【剑指offer】重建二叉树
    【剑指offer】从尾到头打印链表
    【剑指offer】替换空格
    【剑指offer】二维数组中的查找
    聚类算法项目整理
  • 原文地址:https://www.cnblogs.com/fruit1024/p/12306604.html
Copyright © 2011-2022 走看看