我發現這個問題(How to get the max of two values in MySQL?),同時尋找方法來比較離散的一組值。如何獲得3個值中的最小值,其中一些可能在MySQL中使用LEAST()爲空?
我希望能夠得到數選擇值,其中一些人可能是null
,因爲它們是可選的,但MySQL docs說的最低:
如果任何參數爲NULL,則結果爲NULL。
我發現這個問題(How to get the max of two values in MySQL?),同時尋找方法來比較離散的一組值。如何獲得3個值中的最小值,其中一些可能在MySQL中使用LEAST()爲空?
我希望能夠得到數選擇值,其中一些人可能是null
,因爲它們是可選的,但MySQL docs說的最低:
如果任何參數爲NULL,則結果爲NULL。
使用COALESCE()
功能上可爲空值:
select LEAST(COALESCE(@foo, <max int>), COALESCE(@bar, <max int>));
,如果你得到最大int值,然後兩個是空的(除非有你實際上可以有最大int值作爲一個像樣的機會真正的參數,那麼更多的邏輯是必要的)
@MarkByers - true ...儘管如此,我無法將我的大腦包裹在一個我將在字符數據上使用LEAST()的案例中。 –
@Jeremy:按詞典順序排序 - 在lexikon中找到第一個詞。 –
@ypercube,這似乎是一個教科書的例子,通過/限制我......使用'最少()'...好吧,我想你可以做到這一點。我可以誠實地說,我從來沒有使用它,並沒有感覺到它的缺乏。 –
如何:
LEAST(COALESCE(col1, col2, col3),
COALESCE(col2, col3, col1),
COALESCE(col3, col1, col2))
顯然日是不能很好地擴展到超過3個值。
這是一個有趣的方法,但我不知道它有多實用。爲什麼要引用像這樣的其他列? –
哦,我不能說它會起作用,我只是想象一個情況,即您對三個完全相同的數字運行LEAST(),因爲只有一個值不爲空。對我來說似乎是一種浪費,但這種方式或許沒有任何區別。 –
這對我來說也是一種浪費。最大數量似乎更輕 - 比較少做。 – antitoxic
工程,很容易擴展,並且不依賴任何在數據中沒有找到的值,但可能極其低效!
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
你要硬編碼一個大數目說99999
LEAST(IFNULL(COL_1,999999),
IFNULL(COL_2,999999), IFNULL (COL_3,999999), IFNULL(COL_1,999999))
即只需添加IFNULL,然後將值或列名稱wi一個足夠大的整數。
那麼,爲什麼你的問題是如何使用'Least'來實現呢? –
在標題中添加了LEAST,這樣我就不會將任何人混淆,這是MAX/MIN問題。任何其他工作方法是appriciated。 – antitoxic