2011-10-12 41 views
4

我發現這個問題(How to get the max of two values in MySQL?),同時尋找方法來比較離散的一組值。如何獲得3個值中的最小值,其中一些可能在MySQL中使用LEAST()爲空?

我希望能夠得到選擇值,其中一些人可能是null,因爲它們是可選的,但MySQL docs說的最低

如果任何參數爲NULL,則結果爲NULL。

+1

那麼,爲什麼你的問題是如何使用'Least'來實現呢? –

+1

在標題中添加了LEAST,這樣我就不會將任何人混淆,這是MAX/MIN問題。任何其他工作方法是appriciated。 – antitoxic

回答

4

使用COALESCE()功能上可爲空值:

select LEAST(COALESCE(@foo, <max int>), COALESCE(@bar, <max int>)); 

,如果你得到最大int值,然後兩個是空的(除非有你實際上可以有最大int值作爲一個像樣的機會真正的參數,那麼更多的邏輯是必要的)

+0

@MarkByers - true ...儘管如此,我無法將我的大腦包裹在一個我將在字符數據上使用LEAST()的案例中。 –

+0

@Jeremy:按詞典順序排序 - 在lexikon中找到第一個詞。 –

+0

@ypercube,這似乎是一個教科書的例子,通過/限制我......使用'最少()'...好吧,我想你可以做到這一點。我可以誠實地說,我從來沒有使用它,並沒有感覺到它的缺乏。 –

2

如何:

LEAST(COALESCE(col1, col2, col3), 
     COALESCE(col2, col3, col1), 
     COALESCE(col3, col1, col2)) 

顯然日是不能很好地擴展到超過3個值。

+0

這是一個有趣的方法,但我不知道它有多實用。爲什麼要引用像這樣的其他列? –

+0

哦,我不能說它會起作用,我只是想象一個情況,即您對三個完全相同的數字運行LEAST(),因爲只有一個值不爲空。對我來說似乎是一種浪費,但這種方式或許沒有任何區別。 –

+0

這對我來說也是一種浪費。最大數量似乎更輕 - 比較少做。 – antitoxic

1

工程,很容易擴展,並且不依賴任何在數據中沒有找到的值,但可能極其低效!

CREATE TABLE X 
(
Id int primary key, 
col1 int null, 
col2 int null, 
col3 int null 
) 

查詢

SELECT id, 
     Min(CASE c 
      WHEN 1 THEN col1 
      WHEN 2 THEN col2 
      WHEN 3 THEN col3 
      END) 
FROM x, 
     (SELECT 1 AS c 
     UNION ALL 
     SELECT 2 
     UNION ALL 
     SELECT 3) t 
GROUP BY id 
0

你要硬編碼一個大數目說99999

LEAST(IFNULL(COL_1,999999),
IFNULL(COL_2,999999), IFNULL (COL_3,999999), IFNULL(COL_1,999999))

即只需添加IFNULL,然後將值或列名稱wi一個足夠大的整數。

相關問題