gpt4 book ai didi

mysql - 为多列的每一行选择最小值和最大值

转载 作者:行者123 更新时间:2023-12-01 00:21:06 25 4
gpt4 key购买 nike

我正在尝试运行查询以选择每行的最小值和最大值,其中包含多列。

这是我试图从中选择的一些数据 -

ITEM NO IDN IDB     IDC     IDE    IDF  IDG     IDH
A33 1.5 1.25 5 14.5 1.89 1.254 1.21
A34 1.6 1.257 5.95 52.1 1.2 1.256 1.235

我需要的最终结果是——

ITEM NO     MIN   MAX
A33 1.2 14.5
A34 1.2 52.1

在 sql 查询中有什么简单的方法可以做到这一点吗?

最佳答案

假设您没有NULL 值(如示例数据中所示),请使用least()greatest():

select item_no, least(idn, idb, idc, ide, idf, idg, idh) as `min`, 
greatest(idn, idb, idc, ide, idf, idg, idh) as `max`
from table t;

编辑:

对于 NULL 值,这变得更加困难。一种方法是,如果您可以定义一个有效范围,那么像这样的方法就可以了:

select item_no,
least(coalesce(idn, 999999999), coalesce(idb, 999999999), coalesce(idc, 999999999), coalesce(ide, 999999999),
coalesce(idf, 999999999), coalesce(idg, 999999999), coalesce(idh, 999999999)
) as `min`,
greatest(coalesce(idn, -1), coalesce(idb, -1), coalesce(idc, -1), coalesce(ide, -1),
coalesce(idf, -1), coalesce(idg, -1), coalesce(idh, -1)
) as `max`
from table t;

如果一行中的所有值都可以是,您可以使用case 逻辑或nullif() 转换回NULL:

select item_no,
nullif(least(coalesce(idn, 999999999), coalesce(idb, 999999999), coalesce(idc, 999999999), coalesce(ide, 999999999),
coalesce(idf, 999999999), coalesce(idg, 999999999), coalesce(idh, 999999999)
),
999999999) as `min`,
nullif(greatest(coalesce(idn, -1), coalesce(idb, -1), coalesce(idc, -1), coalesce(ide, -1),
coalesce(idf, -1), coalesce(idg, -1), coalesce(idh, -1)
),
-1) as `max`
from table t;

关于mysql - 为多列的每一行选择最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26235896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com