首页 > 试题广场 >

找出所有员工当前薪水salary情况

[编程题]找出所有员工当前薪水salary情况
  • 热度指数:382597 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个薪水表,salaries简况如下:
emp_no 
salary
from_date 
to_date
10001
72527 2002-06-22
9999-01-01
10002
72527 2001-08-02
9999-01-01
10003
43311 2001-12-01 9999-01-01

请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示,以上例子输出如下:
salary
72527
43311

示例1

输入

drop table if exists  `salaries` ; 
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`));
INSERT INTO salaries VALUES(10001,72527,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');

输出

72527
43311
楼上都是用distinct,但是大表一般用distinct效率不高,大数据量的时候都禁止用distinct,建议用group by解决重复问题。
select salary from salaries where to_date='9999-01-01' group by salary order by salary desc
发表于 2017-07-28 11:31:52 回复(39)
DISTINCT 用于返回唯一不同的值
SELECT DISTINCT salary FROM salaries WHERE to_date='9999-01-01' ORDER BY salary DESC;



运行时间:20ms

占用内存:3304k


发表于 2018-12-23 17:56:44 回复(0)
select distinct salary from salaries where to_date='9999-01-01' order by salary desc;
发表于 2017-12-06 12:17:00 回复(0)
distinct和group by:
要去重的列数据种类很多时,group by更快
要去重的列数据种类很少时,distinct更快
发表于 2018-11-05 20:32:57 回复(0)
对于distinct与group by的使用: 1、当对系统的性能高并数据量大时使用group by 2、当对系统的性能不高时使用数据量少时两者皆可 3、尽量使用group by
发表于 2019-03-02 15:22:51 回复(4)
此题应注意以下两点:
1、相同薪水显示一次,则使用SELECT DISTINCT可去除重复值
2、要求逆序排列,则在最后应使用ORDER BY salary DESC
SELECT DISTINCT salary FROM salaries 
WHERE to_date = '9999-01-01' ORDER BY salary DESC

编辑于 2017-07-11 19:24:22 回复(7)

mysql获取当前时间 : now()

sqlServer获取当前时间: getDate()
第一遍提交未通过:

select distinct salary from salaries where to_date>=now() order by salary desc;

仔细看题才知道,题目给了to_date='9999-01-01',修改通过:

select distinct salary from salaries where to_date='9999-01-01' order by salary desc;
编辑于 2017-07-30 11:18:45 回复(1)
一、思路
找出员工具体薪水的情况,并逆序;
1、去重,因为薪水可能出现重复值
2、因为是当前工资,所以筛选日期
3、对薪水进行逆序,
SELECT DISTINCT salary
FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary DESC ;


发表于 2021-03-22 21:33:11 回复(3)
1、关键词:当前时间、降序排列、相同薪水只显示一次
2、语句
SELECT distinct salary
FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary desc
3、总结
大表一般用distinct效率不高,大数据量的时候都禁止用distinct,建议用group by解决重复问题。
select salary from salaries where to_date='9999-01-01' group by salary order by salary desc

发表于 2020-08-02 12:23:14 回复(5)
可以告诉我为什么都要加where to_date='9999-01-01'呢???
发表于 2021-02-07 16:12:55 回复(10)
第一种:用distinct
select
    distinct salary
from
    salaries
where
    to_date='9999-01-01'
order by
    salary
desc;
    
第二种:用group by
select
    salary
from
    salaries
where
    to_date='9999-01-01'
group by
    salary
order by
    salary
desc;
    


发表于 2020-07-08 22:19:19 回复(1)
select distinct salary from salaries order by salary desc

select salary from salaries group by salary order by salary desc

数据量少的时候用 distinct
数据量大的时候用 group by
发表于 2021-12-17 11:03:03 回复(0)
看了很多条代码,为什么都要去关注to_date这一列?
发表于 2021-05-07 21:14:26 回复(0)

去重:SELECT DISTINCT 列名称 FROM 表名称

还要注意to_date要等于9999-01-01.

select distinct salary from salaries 
where to_date='9999-01-01' 
order by salary desc;
编辑于 2017-11-08 17:42:53 回复(5)
为什么我在idea里的mysql console里 写 group by salary desc 可以逆序查出来,在这个答题页面里会报错
发表于 2022-09-23 16:43:38 回复(0)
select distinct salary from salaries
order by salary desc
发表于 2022-09-01 00:26:20 回复(0)
select salary from salaries group  by salary order by salary desc

发表于 2022-04-21 15:26:14 回复(0)
1、关键词:当前时间、降序排列、相同薪水只显示一次
2、语句
SELECT distinct salary
FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary desc
3、总结
大表一般用distinct效率不高,大数据量的时候都禁止用distinct,建议用group by解决重复问题。
select salary from salaries where to_date='9999-01-01' group by salary order by salary desc
发表于 2021-06-09 21:48:21 回复(0)
对于distinct与group by的使用:
1.当对系统的性能高并且数据量大时使用group by
2.当对系统的性能不高时或者使用数据量少时两者借口
3.尽量使用group by
发表于 2021-05-27 15:28:58 回复(0)
SELECT DISTINCT salary
FROM salaries
WHERE to_date = '9999-01-01'
ORDER BY salary DESC;
发表于 2021-03-27 23:48:33 回复(1)