当前位置: 首页 > 面试题库 >

如何获得最小函数结果的列名?

佘俊茂
2023-03-14
问题内容

我有一个员工表,如下所示:

| id | name | q1 | q2 | q3 | q4 |
+----+------+----+----+----+----+
| 1  | John | 20 | 30 | 10 | 4  |
| 2  | Ram  | 07 | 10 | 03 | 4  |
| 3  | John | 05 | 03 | 15 | 40 |
| 4  | Sree | 12 | 05 | 20 | 25 |

我需要获取id等于4的问题的最小值和最大值。在这种情况下,我需要返回5和25。我使用以下查询实现了这一点:

SELECT id, name,
  LEAST(q1, q2, q3, q4) AS minValue,
  GREATEST(q1, q2, q3, q4) AS maxValue
FROM employee
WHERE id = 4;

但是,这不会返回的是问题ID。如何调整查询以显示q2是最小值,q4是最大值?我知道我可以写一个大写的语句,但是我也觉得可以使用联接来完成,但是我不知道。

注意:这是针对postgresql数据库的,但是我也标记了MySQL,因为我知道它也支持LEASTGREATEST函数。如果两种解决方案都
非常 不同,那么我将删除此注释并提出一个单独的问题。

编辑

我已经有一个SQL Fiddle。


问题答案:

您可以使用以下case语句:

CASE
WHEN LEAST(q1, q2, q3, q4) = q1 THEN 'q1'
WHEN LEAST(q1, q2, q3, q4) = q2 THEN 'q2'
WHEN LEAST(q1, q2, q3, q4) = q3 THEN 'q3'
ELSE 'q4'
END as minQuestion

(注意:它将失去与领带有关的信息。)

如果您对联系感兴趣,则可以通过子查询和数组来解决问题:

with employee as (
  select id, q1, q2, q3, q4
  from (values
    (1, 1, 1, 3, 4),
    (2, 4, 3, 1, 1)
  ) as rows (id, q1, q2, q3, q4)
)

SELECT least(q1, q2, q3, q4),
       array(
         select q
         from (values (q1, 'q1'),
                      (q2, 'q2'),
                      (q3, 'q3'),
                      (q4, 'q4')
              ) as rows (v, q)
         where v = least(q1, q2, q3, q4)
       ) as minQuestions
FROM employee e
WHERE e.id = 1;


 类似资料:
  • 我正在使用一个挂起的意图来启动一个闹钟(使用AlarmManager)。我需要不同的结果代码启动的活动,基于两个按钮中的哪一个放在它的用户点击(Snooze或取消)。我怎么得到这个结果?不幸的是,在关闭活动上启动finish()方法之后,没有在父活动中启动onActivityResult()方法。在Android文档中,它指出

  • 我正在构建/训练Tesseract从捕获的照片中识别护照MRZ代码。在将照片/图像发送到Tesseract引擎之前,我将应用以下图像预处理技术: 二值化 正常化 取样 去噪 细化(可选) 此外,我已经用正确的字体(OCR-B)训练了Tesseract引擎,方法是创建大量的框文件(来自大约35个示例,其中包含从OCR-B字体的文本示例中获取的照片),修复框文件中的任何错误,创建训练文件,最后用我的所

  • 这是我的doubht List chars=new ArrayList(); 上述列表中包含的值是[A, A, B, B, C, D, E]; 我想得到一个作为输出,因为这是根据ascii的最小值。如何在java中获取此值。

  • 计算两个地方之间的距离;当您知道java中的经度和纬度时,使用两个lat和longi也可以使用此链接以米为单位计算距离 我得到的结果是米,比如2.4737676E-5,这也是一个浮动值。 我想只取小数点后的前两个值。但使用十进制格式和字符串格式,我也无法得到预期的结果,如(2.47)。。仅为0.00。

  • 问题内容: 我一直在尝试发送HttpPost请求并获取响应,但是即使我能够建立连接,我仍然无法获得如何获取由请求-响应返回的字符串消息。 对不起,我听起来很幼稚,因为我是Java新手。请帮我。 问题答案: 尝试在您的响应中使用:

  • 我需要获取数据库中的所有记录作为数组使用在教义中,我的查询是这样的 即使将水合模式设置为,我也会将结果作为对象 我犯了什么错误?