Возвращает имя столбца для минимального значения из той же строки в SQL

#mysql #sql

#mysql #sql

Вопрос:

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

 SELECT least(supplier1,supplier2,supplier3,supplier4,supplier5) AS minValue 
FROM 
priceTable  
WHERE partno='OL0003';
  

Приведенное выше дает 20. Теперь я хочу выбрать 20 и имя столбца, которое в данном случае является Supplier1. Какой запрос мне нужно добавить или есть ли код рефакторинга, который может помочь сделать это сразу. Я использую mysqlвведите описание изображения здесь

Комментарии:

1. @fmsthird: я хочу отобразить имя поля и минимальное значение

Ответ №1:

После этого вам нужно case выражение:

 SELECT least(supplier1, supplier2, supplier3, supplier4, supplier5) AS minValue,
        (CASE least(supplier1, supplier2, supplier3, supplier4, supplier5)
              WHEN supplier1 THEN 'supplier1'
              WHEN supplier2 THEN 'supplier2'
              WHEN supplier3 THEN 'supplier3'
              WHEN supplier4 THEN 'supplier4'
              WHEN supplier5 THEN 'supplier5'
         END) as column_name_for_min
FROM priceTable  
WHERE partno = 'OL0003';
  

Это было бы намного проще, если бы вы лучше структурировали свои данные. У вас должна быть таблица PartSuppliers с одной строкой на деталь и на поставщика.

Тогда вы могли бы получить наименьшее значение различными способами, такими как:

 select ps.*
from partsuppliers ps
where ps.cost = (select min(ps2.cost)
                 from partsuppliers ps2
                 where ps2.partno = ps.partno
                );