【发布时间】:2021-12-08 21:51:13
【问题描述】:
这是一个例子:
表格
| Name | Salary |
|---|---|
| A | 1000 |
| B | 500 |
| C | 400 |
| D | 100 |
输出
| Name | salary_highest | name | salary_Lowest |
|---|---|---|---|
| A | 1000 | D | 100 |
| B | 500 | C | 400 |
因此,最高和最低工资应该被映射并出现在一行中,并且输出应该是多行而不是映射高低工资的单行,直到表的数据结束。
我能够得到最大值和最小值,第二个最大值和第二个最小值等等,一次只能得到一行,但这不是我想要的。
我们可以使用的任何循环。 我正在使用 MySQL - mycompiler.io 在线编译器。
更新: 我试过这种方式-
Select E1.salary as MIN, E2.salary as MAX
from employees E1, employees E2 where
E1.salary < (select max(salary) from employees) and
E2.salary < (select min(salary) from employees);
得到了这个输出-
输出
| MIN | MAX |
|---|---|
| 500 | 1000 |
| 400 | 1000 |
| 100 | 1000 |
| 500 | 500 |
| 400 | 500 |
| 100 | 500 |
| 500 | 400 |
| 400 | 400 |
| 100 | 400 |
猜猜循环工作,但所有额外的记录都得走了,输出应该是-
| MIN | MAX |
|---|---|
| 100 | 1000 |
| 400 | 500 |
列表中存在的。我哪里错了
【问题讨论】:
-
如果行数为奇数会怎样?工资有关系吗?
-
select version()显示什么? -
考虑添加更好的样本数据和Minimal, Reproducible Example,因为它有太多的歧义和场景没有涵盖。您还应该包括到目前为止您的最佳尝试以及您卡在哪里。
-
如果我理解正确,你想要做的基本上是:得到 both
MAX(salary)和MIN(salary)以及正确的name,然后重新使用相同的查询并排除之前的结果? -
枚举行 asc 和 desc 然后通过 t1.n_asc+t2.n_desc=count+1 将它们组合(连接 2 个副本)成对。