#mysql #sql
#mysql #sql
Вопрос:
Я могу создать запрос, который ищет «столбец 2» в «таблице 1» для значения «3» и возвращает значение в отдельном «столбце 1»
SELECT [Column 2]
FROM [Table 1]
WHERE [Column 1] = 3
Однако я не знаю, как заставить запрос возвращать «0», если «3» не найдено — любая помощь по этому поводу?
Ответ №1:
Вы можете использовать агрегацию:
select (case when count(*) = 0 then 0 else max(column2) end) as has_3
from table1
where column1 = 3;
Или проще:
select coalesce(max(column2), 0)
from table1
where column1 = 3;
Комментарии:
1. Где вы ссылаетесь на столбец 2? Существует несколько столбцов, но требуется вернуть только столбец 2.
2. @user14750197 . . . Что, если есть несколько значений?
3. Если в столбце 1 имеется несколько значений «3», тогда возвращается только значение столбца 2, которое было введено последним в таблице (дальше всего вниз по таблице).
4. Похоже, что вы обработали редактирование: ВЫБЕРИТЕ (СЛУЧАЙ, КОГДА COUNT (*) = 0, ЗАТЕМ 0 ELSE MAX (столбец 2) end) как столбец 2 ИЗ [Таблица 1], где столбец 1 = 3
Ответ №2:
Используйте case
:
select
case
when column1 = 3 then column2
else 0
end as column2
FROM table1
Комментарии:
1. Похоже, что это возвращает массив, как если бы все значения в столбце 2 были «0», а затем возвращает фактическое значение в столбце 2, где столбец 1 = 3
2. Не уверен, что вы имеете в виду; мне кажется, что он делает именно то, что вы просите (хотя в другом вопросе было совершенно другое представление о том, что вы спросили). Добавьте некоторые образцы данных и ожидаемые результаты для этого образца данных к вашему вопросу