[英]Select min and max for each row with multiple columns
我正在尝试运行查询以选择具有多列的每一行的最小值和最大值。
这是我要从中选择的一些数据-
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;
您可以转换回NULL
与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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.