Как получить минимум 3 значения, где некоторые из них могут быть нулевыми в MySQL, используя LEAST ()? - PullRequest
4 голосов
/ 12 октября 2011

Я нашел этот вопрос ( Как получить максимум двух значений в MySQL? ), когда искал способы сравнения дискретного набора значений.

Я хочу иметь возможность получить минимум из нескольких выбранных значений, где некоторые из них могут быть null, поскольку они являются необязательными, но MySQL документы говорит:

Если какой-либо аргумент равен NULL, результат равен NULL.

Ответы [ 4 ]

4 голосов
/ 12 октября 2011

Используйте функцию COALESCE() для значений NULL:

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

если вы получите значение max int, тогда оба значения будут нулевыми (если не будет достаточного шанса, что вы на самом деле можете использовать значение max int в качестве реального аргумента, тогда потребуется больше логики)

2 голосов
/ 12 октября 2011

Как насчет этого:

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

Очевидно, что это плохо масштабируется до более чем 3 значений.

1 голос
/ 12 октября 2011

Работает, легко расширяется и не полагается на какие-либо значения, не найденные в данных, но, вероятно, ужасно неэффективные!

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 голосов
/ 12 октября 2011

Вы должны жестко ввести большое число, скажем, 99999.

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

т.е. просто добавьте IFNULL, затем значение или имя столбца с достаточно большим целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...