微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql-如何获取最小函数结果的列名?

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

| 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,因为我知道它也支持LEAST和GREATEST函数.如果两种解决方案都非常不同,那么我将删除此注释并提出一个单独的问题.

编辑

我已经有一个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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐