#mysql #sql #select #where-clause
#mysql #sql #выберите #предложение where
Вопрос:
У меня есть данные, которые поступают из розничного магазина, и столбцы приведены ниже
col_1 qty_1 col_2 qty_2 col_3 qty_3
Green 5 Red 8 Yellow 10
Если я хочу узнать количество зеленого цвета, то я могу написать простой запрос с где col_1 = ‘Зеленый’.
Но я не получаю зеленый цветовой код только в col_1. Он продолжает перетасовывать между col_1, col_2 и col_3, как показано ниже
col_1 qty_1 col_2 qty_2 col_3 qty_3
Green 5 Red 8 Yellow 10
Yellow 10 Green 7 Red 20
Как я могу выполнить один запрос для извлечения количества доступного зеленого цвета без изменения запроса каждый раз?
Комментарии:
1. Пожалуйста, укажите базу данных, которую вы используете. Кроме того, что, если
green
находится в двух столбцах?
Ответ №1:
select case when col_1 = 'Green' then qty_1
when col_2 = 'Green' then qty_2
when col_3 = 'Green' then qty_3
end as qty
from your_table
where 'Green' in (col_1, col_2, col_3)
Комментарии:
1. Иногда я получаю нулевые значения для ‘Green’, как мы можем с этим справиться?
2. Как вы хотите, чтобы это обрабатывалось, если
qty
столбец не имеет значения, когдаcol
он зеленый ?3. Если оно равно null, то должно быть возвращено последнее ненулевое значение
4. Или возвращать только ненулевые строки. Я могу упорядочить по времени, чтобы извлечь последнее значение
5. вам лучше записать это в новый вопрос с примерами данных и ожидаемым результатом.
Ответ №2:
Чтобы устранить проблему с нулевыми значениями, вы можете использовать условие COALESCE (), если оно равно NULL, то оно будет пустым:
SELECT case when COALESCE(col_1,'') = 'Green' then qty_1
when COALESCE(col_2,'') = 'Green' then qty_2
when COALESCE(col_3,'') = 'Green' then qty_3
end as qty
FROM your_table
WHERE 'Green' IN ( COALESCE(col_1,''), COALESCE(col_2,''), COALESCE(col_3,'') )
;
Комментарии:
1. Если я попытаюсь выбрать * из your_table, где ‘Green’ В (col1, col2, col3), то это не вернет никакого значения : (