基于列对表结果进行排序,但没有自然排序?

kpbwa7wx  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(293)

我想根据他们的职位来安排员工;i、 不是工作名称的自然顺序(字母顺序),而是按以下顺序
总裁->经理->办事员->业务员。
我在考虑创建一个job\u name a priority的视图,然后用它对表进行排序。
有没有什么方法可以不使用任何其他视图来进行相同的操作?
员工样本表

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
neskvpey

neskvpey1#

你可以使用 case 声明如下:

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
aemubtdh

aemubtdh2#

作为对斯盖德斯答案的补充,案例采用了另一种稍微紧凑的形式:

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还支持field:

SELECT * FROM employee 
ORDER BY FIELD(job_name,
    'PRESIDENT',
    'MANAGER',
    'CLERK',
    'SALESMAN');

与case不同,它不是标准的sql,所以这就是不使用它的原因,但它在概念上与第一个示例做相同的事情
请注意,您的数据包含analyst,但您没有为此编写代码

相关问题