簡體   English   中英

SQL:獲取一列中的最小值和最大值

[英]SQL : get Min and Max value in one column

我有一個帶有姓名和薪水的employee表。

我想打印這 2 列,其中只有 2 條記錄,即我薪酬最高和最低員工的姓名。

它應該是這樣的:

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

以下代碼不是我想要的,我想要 2 列中的最小值和最大值,其中 2 個名稱代表每個值

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

我終於想出了我想要的簡單代碼。

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);

我不知道聯盟。 謝謝大家的貢獻

您可以通過使用子查詢來做到這一點:

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

這種方式我用過。 你可以這樣做

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)

最好的方法取決於數據庫,但以下使用標准 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;

有很多方法可以做到這一點。 這只是其中之一。 如果他們的最低/最高工資相同,它也可能提供超過 2 條記錄

聲明 @min int, @max int 從 YourTable 中選擇 @min=min(Salary),@max=max(Salary)

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

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

  1. 按薪水 1 將所有用戶分組連接
  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

你可以試試這個。 示例輸出。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM