Вернуть наименьшее значение больше нуля из той же строки в SQL - PullRequest
0 голосов
/ 03 мая 2019

Я хочу получить наименьшее количество цен от разных поставщиков и название поставщика. Наименьшее должно быть больше нуля (0). Я был в состоянии получить минимальное значение, если ноль отсутствует в списке. Например, основываясь на приведенном ниже коде, я хочу иметь возможность выбрать 17 в качестве минимальной цены вместо 0 и sup3 в качестве поставщика. см. мой код ниже:

SELECT least(sup1,sup2,sup3,sup4,sup5) AS mininumValue,
       (CASE least(sup1, sup2, sup3, sup4, sup5)
            WHEN sup1 THEN 'sup1'
            WHEN sup2 THEN 'sup2'
            WHEN sup3 THEN 'sup3'
            WHEN sup4 THEN 'sup4'
            WHEN sup5 THEN 'sup5'
        END) as Supplier 
FROM price_charts  
WHERE partno = 'OL0002';

enter image description here

1 Ответ

3 голосов
/ 03 мая 2019

Это несколько болезненно в MySQL.Один из методов - это отключить данные, отфильтровать и агрегировать.Другой способ - сделать несколько трюков.

К сожалению, LEAST() возвращает NULL, если любое значение равно NULL.Но вы можете использовать магическое значение:

select least(coalesce(nullif(sup1, 0), 999999),
             coalesce(nullif(sup2, 0), 999999),
             coalesce(nullif(sup3, 0), 999999),
             coalesce(nullif(sup4, 0), 999999),
             coalesce(nullif(sup5, 0), 999999)
            ) as minimumValue,
       (case least(coalesce(nullif(sup1, 0), 999999),
                   coalesce(nullif(sup2, 0), 999999),
                   coalesce(nullif(sup3, 0), 999999),
                   coalesce(nullif(sup4, 0), 999999),
                   coalesce(nullif(sup5, 0), 999999)
                  )
            when sup1 then 'sup1'
            when sup2 then 'sup2'
            when sup3 then 'sup3'
            when sup4 then 'sup4'
            when sup5 then 'sup5'
       end) as Supplier 
from price_charts pc 
where partno = 'OL0002';

Примечание. У вас плохая модель данных.У вас должна быть другая таблица с одной строкой для каждого поставщика и цены, а не для переноса значений в отдельные столбцы.

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