簡體   English   中英

為多列的每一行選擇最小值和最大值

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

您可以轉換回NULLcase邏輯或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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM