I want to order the employees based on their designation; ie Not the natural order of the job_name (Alphabetical) but in the following order
President -> Manager -> Clerk -> Salesman.
I was thinking of creating a view of job_name an priority and then using that to sort the table.
Is there any way to do it without using any other view for the same?
Employee sample table
emp_id | emp_name | job_name | manager_id | hire_date | salary | commission | dep_id
--------+----------+-----------+------------+------------+---------+------------+--------
68319 | KAYLING | PRESIDENT | | 1991-11-18 | 6000.00 | | 1001
66928 | BLAZE | MANAGER | 68319 | 1991-05-01 | 2750.00 | | 3001
67832 | CLARE | MANAGER | 68319 | 1991-06-09 | 2550.00 | | 1001
65646 | JONAS | MANAGER | 68319 | 1991-04-02 | 2957.00 | | 2001
67858 | SCARLET | ANALYST | 65646 | 1997-04-19 | 3100.00 | | 2001
69062 | FRANK | ANALYST | 65646 | 1991-12-03 | 3100.00 | | 2001
63679 | SANDRINE | CLERK | 69062 | 1990-12-18 | 900.00 | | 2001
64989 | ADELYN | SALESMAN | 66928 | 1991-02-20 | 1700.00 | 400.00 | 3001
65271 | WADE | SALESMAN | 66928 | 1991-02-22 | 1350.00 | 600.00 | 3001
66564 | MADDEN | SALESMAN | 66928 | 1991-09-28 | 1350.00 | 1500.00 | 3001
68454 | TUCKER | SALESMAN | 66928 | 1991-09-08 | 1600.00 | 0.00 | 3001
68736 | ADNRES | CLERK | 67858 | 1997-05-23 | 1200.00 | | 2001
69000 | JULIUS | CLERK | 66928 | 1991-12-03 | 1050.00 | | 3001
69324 | MARKER | CLERK | 67832 | 1992-01-23 | 1400.00 | | 1001
You can use a case
statement for that:
select *
from yourtable
order by case when job_name = 'President' then 1
when job_name = 'Manager' then 2
when job_name = 'Clerk' then 3
when job_name = 'Salesman' then 4
end, emp_name
In supplement to sgeddes' answer, case takes another, slightly more compact form also:
SELECT * FROM employee
ORDER BY
CASE job_name
WHEN 'PRESIDENT' then 0
WHEN 'MANAGER' then 1
WHEN 'CLERK' then 2
WHEN 'SALESMAN' then 3
ELSE 4
END
MySQL also supports something called FIELD:
SELECT * FROM employee
ORDER BY FIELD(job_name,
'PRESIDENT',
'MANAGER',
'CLERK',
'SALESMAN');
Unlike CASE, it's not standard SQL, so that's a reason not to use it, but it conceptually does the same thing as the first example
Note that your data contains ANALYST, but you didn't code for this
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.