Вопрос:
У меня есть таблица 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);
Я не знал о Союзе. Спасибо всем за ваш вклад
Ответ №1
Лучший метод зависит от базы данных, но в следующем случае используется стандартный 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
Есть много способов сделать это. Это только один из них. Также это может дать более 2 записей, если они имеют одинаковую минимальную/максимальную зарплату
объявить @min int, @max int select @min = min (зарплата), @max = max (зарплата) из YourTable
ВЫБЕРИТЕ Имя, Зарплата из YourTable, где Зарплата = @мин ИЛИ Зарплата = @макс
Ответ №3
Так я и использовал. Вы можете сделать это
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) Ответ №4
Вы можете сделать следующее, если вы используете MySQL
- Группа Concat всех пользователей по зарплате 1
- Список пользователей с минимальной зарплатой, использующий “заказ по лимиту 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
Вы можете попробовать это. пример вывода.
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;