【问题标题】:SQL : get Min and Max value in one columnSQL:在一列中获取最小值和最大值
【发布时间】: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 人的最高/最低工资怎么办
  • 好问题,我会研究它,但现在这个问题优先

标签: sql groupwise-maximum


【解决方案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,您可以执行以下操作

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

      即使超过 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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-23
            • 1970-01-01
            • 2020-09-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多