[英]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.