SQL:在一列中获取最小值和最大值

Posted

技术标签:

【中文标题】SQL:在一列中获取最小值和最大值【英文标题】:SQL : get Min and Max value in one column 【发布时间】:2019-07-13 13:16:18 【问题描述】:

我有一个employee 表,上面有名字和薪水。

我想打印这 2 列,其中只有 2 条记录,即我的最高和最低薪员工的姓名。

它应该看起来像这样:

Name      Salary  
------------------
James       800  
Samanth    3000

以下代码不是我想要的,我想要 2 列中的最小值和最大值,每个值有 2 个名称

SELECT 
    name, MIN(salary), MAX(salary)
FROM
    employee

【问题讨论】:

如果超过 1 人的最高/最低工资怎么办 好问题,我会研究它,但现在这个问题优先 【参考方案1】:

您可以通过使用子查询来做到这一点:

SELECT first_name, salary FROM employees
WHERE salary IN ((SELECT MAX (salary) FROM employees), (SELECT MIN (salary) FROM employees))

【讨论】:

【参考方案2】:

我终于找到了我想要的简单代码。

select emp_name, salary
from employees
where salary = (select max(salary) from employees)
union all
select emp_name, salary
from employees
where salary = (select min(salary) from employees);

我不知道联盟。 谢谢大家的贡献

【讨论】:

【参考方案3】:

你可以试试这个。示例输出。

name      MAX(salary)   MIN(salary)
George    9200          9200
James     5000           100
Kanye     3200          3200
Nicole    4500          4500
Samanth   3000          2300
Umut      1500           250
Vladimir  2300           330

示例表值

id  name      salary
 1  James        800
 2  Samanth     3000
 3  Umut        1500
 4  Umut         250
 5  Nicole      4500
 6  George      9200
 7  Kanye       3200
 8  Vladimir    2300
 9  Vladimir    1000
10  Vladimir     330
11  James       5000
12  James        100
13  Samanth     2300

SELECT name, MAX(salary), MIN(salary) FROM employee GROUP BY name;

【讨论】:

谢谢,但这正是我不想要的,我不想有 3 列而是 2 列【参考方案4】:

如果您使用的是mysql,您可以执行以下操作

    按薪水分组连接所有用户 1st 使用“order by limit 1”的最低工资用户列表 与步骤 2 相同,以获得最高工资 联合他们

即使超过 1 人的最高/最低工资也能解决问题

SELECT * 
FROM   ( 
                SELECT   group_concat(NAME) AS names , 
                         salary , 
                         'minimum' AS remarks 
                FROM     employee 
                GROUP BY salary 
                ORDER BY salary limit 1)tmp 
UNION ALL 
SELECT * 
FROM   ( 
                SELECT   group_concat(NAME) AS names , 
                         salary , 
                         'maximum' AS remarks 
                FROM     employee 
                GROUP BY salary 
                ORDER BY salary DESC limit 1
    )tmp1

样本输出

names       salary  remarks
tom,jolly   10      minimum
sally     10001   maximum

【讨论】:

【参考方案5】:

最佳方法取决于数据库,但以下使用标准 SQL:

select max(case when seqnum_asc = 1 then salary end) as min_salary,
       max(case when seqnum_asc = 1 then name end) as min_salary_name,
       max(case when seqnum_desc = 1 then salary end) as max_salary,
       max(case when seqnum_desc = 1 then name end) as max_salary_name      
from (select e.*,
             row_number() over (order by salary asc) as seqnum_asc,
             row_number() over (order by salary desc) as seqnum_desc
      from employee e
     ) e;

【讨论】:

你能提供一个你的代码输出的示例吗?【参考方案6】:

我就是这样用的。你可以这样做

DECLARE @minsalary varchar(60)
set @minsalary = (select top 1 concat(Name, ' ', salary) from employee where salary= (select min(salary) from employee) 
)

DECLARE @maxsalary varchar(60)
set @maxsalary = (select top 1 concat(Name, ' ', salary) from employee where salary= (select max(salary) from employee) 
)

select concat(@maxsalary, ' ', @minsalary)

【讨论】:

【参考方案7】:

有很多方法可以做到这一点。这只是其中之一。如果他们具有相同的最低/最高工资,它也可能提供超过 2 条记录

声明@min int,@max int 从 YourTable 中选择 @min=min(Salary),@max=max(Salary)

SELECT Name, Salary from YourTable where Salary=@min OR Salary=@max

【讨论】:

以上是关于SQL:在一列中获取最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章

db2 sql,如何仅在一张表的同一查询中获取最小值和最大值?

TSQL - 如何在另一列中提取具有最小值和最大值的列

SQL group by:选择另一列有其最小值/最大值的值

获取数组列中的最小值和最大值

sql中怎么比较两个列中的最小值

sql MIN()和MAX()允许您从表中的列中提取最小值和最大值。第1行显示MIN()示例,它选择最小值